Binary Options Basics 👩‍🎓 Binary Options 101 for Dummies

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]

crash help

dcs has been cashing for months, used to never crash before :/

=== Log opened UTC 2020-10-11 14:18:20
2020-10-11 14:18:20.217 INFO DCS: Command line: D:\SteamLibrary\steamapps\common\DCSWorld\bin\DCS.exe
2020-10-11 14:18:20.217 INFO DCS: DCS/ (x86_64; Windows NT 10.0.18363)
2020-10-11 14:18:20.217 INFO DCS: DCS revision: 175957
2020-10-11 14:18:20.217 INFO DCS: Renderer revision: 20900
2020-10-11 14:18:20.217 INFO DCS: Terrain revision: 20771
2020-10-11 14:18:20.217 INFO DCS: CPU cores: 6, threads: 12, System RAM: 16333 MB, Pagefile: 9728 MB
2020-10-11 14:18:20.574 INFO EDCORE: (dDispatcher)enterToState_:0
2020-10-11 14:18:21.012 INFO Dispatcher: 2020/10/11 10:18 V1803061700
2020-10-11 14:18:21.081 INFO INPUT: Device [Keyboard] created deviceId = -1
2020-10-11 14:18:21.102 INFO INPUT: Device [Joystick - HOTAS Warthog {9BEE9130-944C-11ea-8002-444553540000}] created deviceId = -1
2020-10-11 14:18:21.102 INFO INPUT: Joystick created[Joystick - HOTAS Warthog {9BEE9130-944C-11ea-8002-444553540000}], ForceFeedBack: no
2020-10-11 14:18:21.151 INFO INPUT: Device [Throttle - HOTAS Warthog {7F0A2CA0-944C-11ea-8001-444553540000}] created deviceId = -1
2020-10-11 14:18:21.151 INFO INPUT: Joystick created[Throttle - HOTAS Warthog {7F0A2CA0-944C-11ea-8001-444553540000}], ForceFeedBack: no
2020-10-11 14:18:21.151 INFO INPUT: Device [Mouse] created deviceId = -1
2020-10-11 14:18:21.229 INFO SOUND: Using driver: wasapi
2020-10-11 14:18:21.232 INFO SOUND: Found 4 available audio device(s):
2020-10-11 14:18:21.232 INFO SOUND: 0: ID: "{}.{a3bc94c3-9243-4999-94ca-cf14d01bfd63}", Name: "VG248 (3- NVIDIA High Definition Audio)"
2020-10-11 14:18:21.232 INFO SOUND: 1: ID: "{}.{b9b8fde4-1f79-4ade-bbaa-bf1f2d844bc0}", Name: "Headphones (Oculus Virtual Audio Device)"
2020-10-11 14:18:21.232 INFO SOUND: 2: ID: "{}.{e7804ff2-fc95-4bbc-9ba2-0e82dab295c7}", Name: "VE228 (3- NVIDIA High Definition Audio)"
2020-10-11 14:18:21.232 INFO SOUND: 3: ID: "{}.{eefc5f93-4c6c-44cd-98cc-74f502409cb3}", Name: "Speakers (2- Yeti Stereo Microphone)"
2020-10-11 14:18:25.940 INFO SOUND: Added sound path: Sounds
2020-10-11 14:18:26.057 INFO SOUNDER: Loaded 207 packed sounders.
2020-10-11 14:18:26.057 INFO Dispatcher: InitLow
2020-10-11 14:18:28.003 INFO NET: Got Steam auth data.
2020-10-11 14:18:28.267 INFO DCS: Successfully got Steam authorization data.
2020-10-11 14:18:28.267 INFO Dispatcher: Loading installed modules...
2020-10-11 14:18:41.794 INFO Scripting: OBSOLETE mount_vfs_sound_path() used in ./CoreMods/aircraft/AJS37/entry.lua
2020-10-11 14:18:41.987 INFO Scripting: PLUGINS START-------------------------------------------------
2020-10-11 14:18:42.289 INFO SOUND: Added sound path: ./CoreMods/tech/TechWeaponPack/Sounds
2020-10-11 14:18:42.306 INFO SOUNDER: Loaded 3 packed sounders.
2020-10-11 14:18:42.734 INFO SOUND: Added sound path: ./CoreMods/tech/USS John C Stennis/Sounds
2020-10-11 14:18:42.735 INFO SOUNDER: Loaded 1 packed sounders.
2020-10-11 14:18:42.762 INFO SOUND: Added sound path: ./CoreMods/tech/USS_Nimitz/Sounds
2020-10-11 14:18:42.776 INFO SOUNDER: Loaded 3 packed sounders.
2020-10-11 14:18:43.542 INFO SOUND: Added sound path: ./CoreMods/aircraft/AJS37/Sounds
2020-10-11 14:18:43.661 INFO SOUND: Added sound path: ./CoreMods/aircraft/AV8BNA/Sounds
2020-10-11 14:18:43.669 INFO SOUNDER: Loaded 1 sounders.
2020-10-11 14:18:43.672 WARNING EDCORE: Source ./CoreMods/aircraft/AV8BNA/Shapes is already mounted to the same mount /models/.
2020-10-11 14:18:43.783 INFO SOUND: Added sound path: ./CoreMods/aircraft/C-101/Sounds
2020-10-11 14:18:44.163 INFO SOUND: Added sound path: ./CoreMods/aircraft/ChinaAssetPack/Sounds
2020-10-11 14:18:44.210 INFO SOUNDER: Loaded 11 sounders.
2020-10-11 14:18:44.487 INFO SOUND: Added sound path: ./CoreMods/aircraft/Christen Eagle II/Sounds
2020-10-11 14:18:46.253 INFO SOUND: Added sound path: ./CoreMods/aircraft/F14/Sounds
2020-10-11 14:18:46.302 INFO SOUNDER: Loaded 1 sounders.
2020-10-11 14:18:46.982 INFO SOUND: Added sound path: ./CoreMods/aircraft/Hawk/Sounds
2020-10-11 14:18:47.256 INFO SOUND: Added sound path: ./CoreMods/aircraft/I-16/Sounds
2020-10-11 14:18:47.502 INFO SOUND: Added sound path: ./CoreMods/aircraft/M-2000C/Sounds
2020-10-11 14:18:47.832 INFO SOUND: Added sound path: ./CoreMods/aircraft/MiG-21bis/Sounds
2020-10-11 14:18:47.992 INFO SOUND: Added sound path: ./CoreMods/aircraft/SA342/Sounds
2020-10-11 14:18:48.183 INFO SOUND: Added sound path: ./Mods/aircraft/F-15C/Sounds
2020-10-11 14:18:48.318 INFO SOUND: Added sound path: ./Mods/aircraft/F-16C/Sounds
2020-10-11 14:18:48.527 INFO SOUND: Added sound path: ./Mods/aircraft/FA-18C/Sounds
2020-10-11 14:18:48.667 INFO SOUND: Added sound path: ./Mods/aircraft/TF-51D/Sounds
2020-10-11 14:18:48.717 INFO SOUND: Added sound path: ./Mods/terrains/PersianGulf/Sounds
2020-10-11 14:18:48.782 INFO Scripting: PLUGINS DONE--------------------------------------------------
2020-10-11 14:18:49.315 INFO SECURITYCONTROL: Loaded ./CoreMods/aircraft/AV8BNA/bin/AV8B_AI.dll
2020-10-11 14:18:49.318 INFO SECURITYCONTROL: Loaded ./CoreMods/aircraft/C-101/bin/C101Core.dll
2020-10-11 14:18:49.322 INFO SECURITYCONTROL: Loaded ./CoreMods/aircraft/ChinaAssetPack/bin/CAP_AI.dll
2020-10-11 14:18:49.326 INFO SECURITYCONTROL: Loaded ./CoreMods/aircraft/ChinaAssetPack/bin/JF-17_AI.dll
2020-10-11 14:18:49.329 INFO CE2_AI: Loading CE AI
2020-10-11 14:18:49.329 INFO SECURITYCONTROL: Loaded ./CoreMods/aircraft/Christen Eagle II/bin/CE2_AI.dll
2020-10-11 14:18:49.333 INFO SECURITYCONTROL: Loaded ./CoreMods/aircraft/F14/bin/F14-AI.dll
2020-10-11 14:18:49.337 INFO MiG21_AI: Loading CE AI
2020-10-11 14:18:49.337 INFO SECURITYCONTROL: Loaded ./CoreMods/aircraft/MiG-21bis/bin/MiG21_AI.dll
2020-10-11 14:18:49.345 INFO SECURITYCONTROL: Loaded ./CoreMods/services/CaptoGlove/bin/edCaptoGlove.dll
2020-10-11 14:18:49.401 INFO SECURITYCONTROL: Loaded ./CoreMods/services/VoiceChat/bin/VoiceChat.dll
2020-10-11 14:18:49.802 INFO SECURITYCONTROL: Loaded ./Mods/aircraft/jsAvionics/bin/jsAvionics.dll
2020-10-11 14:18:52.059 INFO DCS: =
\['messagesFontScale'\] = 1; \['rainDroplets'\] = true; \['LensEffects'\] = 0; \['heatBlr'\] = 1; \['anisotropy'\] = 3; \['water'\] = 2; \['motionBlur'\] = 0; \['outputGamma'\] = 2.2; \['treesVisibility'\] = 10000; \['aspect'\] = 1.7777777777778; \['lights'\] = 2; \['shadows'\] = 4; \['MSAA'\] = 1; \['SSAA'\] = 0; \['civTraffic'\] = 'high'; \['clutterMaxDistance'\] = 1000; \['cockpitGI'\] = 1; \['terrainTextures'\] = 'max'; \['multiMonitorSetup'\] = '1camera'; \['shadowTree'\] = false; \['chimneySmokeDensity'\] = 5; \['fullScreen'\] = true; \['DOF'\] = 0; \['clouds'\] = 1; \['forestDistanceFactor'\] = 1; \['flatTerrainShadows'\] = 0; \['width'\] = 1920; \['visibRange'\] = 'High'; \['SSLR'\] = 1; \['effects'\] = 3; \['SSAO'\] = 0; \['useDeferredShading'\] = 1; \['sync'\] = true; \['textures'\] = 2; \['scaleGui'\] = true; \['preloadRadius'\] = 60000; \['height'\] = 1080; \['terrainMapMFD'\] = { \['distance'\] = { \['mapLodDistance3'\] = 200000; \['mapLodDistance2'\] = 100000; \['mapLodDistance0'\] = 25000; \['mapLodDistance1'\] = 50000; }; }; 
2020-10-11 14:18:56.924 INFO GRAPHICSVISTA: renderer: 'dx11backend.dll'
2020-10-11 14:18:59.187 INFO DX11BACKEND: DX11Renderer initialization (w:1920 h:1080 fullscrn:1 vsync:0 adapter:0 monitor:1 shaderErrors:1)
2020-10-11 14:18:59.535 INFO DX11BACKEND: Driver Concurrent Creates - 1
2020-10-11 14:18:59.535 INFO DX11BACKEND: Driver Command Lists - 1
2020-10-11 14:18:59.654 INFO DX11BACKEND: NVIDIA API init OK
2020-10-11 14:18:59.660 INFO DX11BACKEND: NVIDIA Display Driver Version 45206.r452_02
2020-10-11 14:18:59.660 INFO DX11BACKEND: GPU count:1
2020-10-11 14:18:59.835 INFO DX11BACKEND: commonPool: 68-128, cbPool: 4-14, samplerPool: 5-16
2020-10-11 14:19:00.202 INFO DX11BACKEND: DX11ShaderBinaries::loadCache Bazashaders/fxo/
2020-10-11 14:19:05.330 ERROR EDCORE: Can't open file 'bazashaders/posteffects/slot.fx.' from fs
2020-10-11 14:19:05.330 WARNING DX11BACKEND: Shader posteffects/slot.fx:DIRECTX11=true;USE_DCS_DEFERRED=1; is outdated as file bazashaders/posteffects/slot.fx is modified.
2020-10-11 14:19:13.699 INFO DX11BACKEND: DX11ShaderBinaries::loadCache done. Loaded 1118/1119.
2020-10-11 14:19:13.753 INFO DX11BACKEND: DX11ShaderBinaries::loadCache C:\Users\ApBoy\Saved Games\DCS\fxo
2020-10-11 14:19:14.086 INFO DX11BACKEND: DX11ShaderBinaries::loadCache done. Loaded 62/62.
2020-10-11 14:19:14.509 INFO VISUALIZER: SceneManager initialization
2020-10-11 14:19:15.669 INFO VISUALIZER: cascade shadows init (preset:'default' quality:4 layers:4 size:4096)
2020-10-11 14:19:16.500 INFO SOUND: Opening default audio device.
2020-10-11 14:19:16.508 INFO SOUND: Driver reports 2 channels with mask 0x3
2020-10-11 14:19:16.508 INFO SOUND: Using 2 channels at 48000 Hz
2020-10-11 14:19:16.508 INFO SOUND: Channel layout: Headphones/Stereo
2020-10-11 14:19:16.859 INFO DCS: gDescription: "NVIDIA GeForce RTX 2070" gVendorId: 4318 gDeviceId: 7943 gMemory: 8031 MB
2020-10-11 14:19:16.983 ERROR EDOBJECTS: Destruction shape not found AVIASHTAB_CRASH
2020-10-11 14:19:16.985 ERROR EDOBJECTS: Object HB_F14_EXT_PHX_ALU with id=320 already declared in table MissileTable
2020-10-11 14:19:21.202 INFO EDCORE: (dDispatcher)enterToState_:1
2020-10-11 14:19:32.406 INFO UIBASERENDERER: Cannot load font [D:\SteamLibrary\steamapps\common\DCSWorld\dxgui\skins\fonts\]!
2020-10-11 14:19:38.362 INFO Dispatcher: //=== END OF INIT ======================================//
2020-10-11 14:19:38.362 INFO EDCORE: (dDispatcher)enterToState_:2
2020-10-11 14:19:38.463 INFO EDCORE: (dDispatcher)enterToState_:3
2020-10-11 14:19:38.463 INFO Lua: Lua CPU usage: metric: average game loading: 47.8552 %
2020-10-11 14:19:38.474 INFO DCS: Screen: MainMenu
2020-10-11 14:19:42.706 INFO NET: Login success.
2020-10-11 14:20:12.735 INFO SOUND: Using SSSE3 for peak calc.
2020-10-11 14:20:12.957 INFO DCS: Screen: Mission
2020-10-11 14:21:21.851 INFO DCS: Screen: MainMenu
2020-10-11 14:21:28.161 INFO DCS: Screen: FastMission
2020-10-11 14:21:37.690 INFO DCS: Screen: FastMissionAdvanced
2020-10-11 14:22:10.929 INFO DCS: Screen: MainMenu
2020-10-11 14:22:10.933 INFO DCS: Screen: FastMission
2020-10-11 14:22:29.263 INFO LUA-TERRAIN: Init('./Mods/terrains/Caucasus\terrain.cfg.lua')
2020-10-11 14:22:29.277 INFO TERRAIN: lSystem::load(./Mods/terrains/Caucasus\terrain.cfg.lua)
2020-10-11 14:22:29.277 INFO TERRAIN: lSystem::CleanScenes()
2020-10-11 14:22:29.277 INFO TERRAIN: lSystem::exit()
2020-10-11 14:22:29.277 INFO VISUALIZER: TerrainRenderer::release
2020-10-11 14:22:29.277 INFO TERRAIN: lSystem::CleanScenes()
2020-10-11 14:22:29.277 INFO EDOBJECTS: lTypeObjectManagerImpl::clear 13
2020-10-11 14:22:30.151 INFO EDTERRAIN4: TERRAIN_REVISION = 3634
2020-10-11 14:22:30.152 INFO EDTERRAIN4: Open terrain cfg "./Mods/terrains/Caucasus\terrain.cfg.lua"
2020-10-11 14:22:30.152 INFO EDTERRAIN4: Build date:
2020-10-11 14:22:30.152 INFO EDTERRAIN4: Texture quality: "max"
2020-10-11 14:22:31.277 INFO EDCORE: 1.072 s terrain references
2020-10-11 14:22:31.280 INFO EDCORE: 0.000 s terrain models
2020-10-11 14:22:31.284 INFO EDCORE: 0.000 s terrain assets
2020-10-11 14:22:31.519 INFO EDCORE: 0.232 s terrain assets2
2020-10-11 14:22:31.789 INFO EDCORE: 0.266 s terrain landfile
2020-10-11 14:22:31.807 INFO EDCORE: 0.014 s terrain surfaceTile
2020-10-11 14:22:31.812 INFO EDTERRAIN4: switchTextures (season=1, minTexture=false)
2020-10-11 14:22:33.298 INFO EDCORE: 1.487 s terrain vfstextures
2020-10-11 14:22:33.420 INFO EDCORE: 0.118 s terrain scene
2020-10-11 14:22:33.423 INFO EDCORE: 0.000 s terrain roaddetails
2020-10-11 14:22:33.427 INFO EDCORE: 0.000 s terrain forest
2020-10-11 14:22:40.255 INFO EDCORE: 6.824 s terrain routes
2020-10-11 14:22:40.260 INFO EDCORE: 0.000 s terrain surfacedetails
2020-10-11 14:22:40.263 INFO EDCORE: 0.000 s terrain blocks
2020-10-11 14:22:40.297 INFO EDCORE: 0.000 s terrain references
2020-10-11 14:22:40.588 INFO EDCORE: 0.322 s terrain superficials
2020-10-11 14:22:40.628 INFO EDCORE: 0.035 s terrain lma
2020-10-11 14:22:40.632 INFO EDCORE: 0.000 s terrain vectordatasettings
2020-10-11 14:22:42.496 INFO EDCORE: 1.860 s terrain navgraph
2020-10-11 14:22:42.544 INFO EDCORE: 0.043 s terrain vti
2020-10-11 14:22:43.670 INFO EDTERRAIN4: terrain time: 13.517271 s
2020-10-11 14:22:43.896 INFO TERRAIN: lSystem::InitScenes()
2020-10-11 14:22:43.896 INFO EDTERRAIN4: lTerraDispatchImpl::setDate( day=22, month=6)
2020-10-11 14:22:43.896 INFO EDTERRAIN4: switchTextures (season=1, minTexture=false)
2020-10-11 14:22:43.896 INFO DX11BACKEND: Reloading textures ...
2020-10-11 14:22:43.903 INFO LUA-TERRAIN: Init done
2020-10-11 14:22:44.032 INFO EDTERRAINGRAPHICS41: ITerrainGraphicsImpl4::openTerrain() START
2020-10-11 14:22:44.045 INFO EDTERRAINGRAPHICS41: loading terrain options: Config/terrain/terrainoptions41.lua
2020-10-11 14:22:44.059 INFO EDTERRAINGRAPHICS41: loading terrain shading options: ./Mods/terrains/Caucasus/shadingOptions/Caucasus.lua
2020-10-11 14:22:44.100 INFO METASHADER: MetaShaderCache2: [108] from ./Mods/terrains/Caucasus/misc/metacache/dcs.lua
2020-10-11 14:22:47.790 INFO METASHADER: loaded [108/108]
2020-10-11 14:22:47.890 WARNING EDTERRAINGRAPHICS41: failed to open "surfaceDetailsHints" section in terrain config
2020-10-11 14:22:47.995 INFO EDTERRAINGRAPHICS41: 0.000010s Loaded reference file "caucasus" buffers: 0
2020-10-11 14:22:47.995 INFO EDCORE: 0.000 s landscape4::lReferenceFile
2020-10-11 14:22:48.073 INFO EDTERRAINGRAPHICS41: 0.073605s Loaded reference file "airfieldslights" buffers: 7
2020-10-11 14:22:48.073 INFO EDCORE: 0.074 s landscape4::lReferenceFile
2020-10-11 14:22:48.655 INFO EDTERRAINGRAPHICS41: 0.578093s Loaded reference file "blockbuildings" buffers: 7
2020-10-11 14:22:48.655 INFO EDCORE: 0.578 s landscape4::lReferenceFile
2020-10-11 14:22:49.225 INFO EDTERRAINGRAPHICS41: 0.565400s Loaded reference file "blocktrees" buffers: 0
2020-10-11 14:22:49.225 INFO EDCORE: 0.565 s landscape4::lReferenceFile
2020-10-11 14:22:49.623 INFO EDTERRAINGRAPHICS41: 0.393164s Loaded reference file "caucasusafbbuildings_new" buffers: 27
2020-10-11 14:22:49.623 INFO EDCORE: 0.393 s landscape4::lReferenceFile
2020-10-11 14:22:49.639 INFO EDTERRAINGRAPHICS41: 0.012748s Loaded reference file "caucasusbridges" buffers: 11
2020-10-11 14:22:49.639 INFO EDCORE: 0.013 s landscape4::lReferenceFile
2020-10-11 14:22:49.697 INFO EDTERRAINGRAPHICS41: 0.053496s Loaded reference file "caucasusobjects" buffers: 0
2020-10-11 14:22:49.697 INFO EDCORE: 0.054 s landscape4::lReferenceFile
2020-10-11 14:22:49.711 INFO EDTERRAINGRAPHICS41: 0.008986s Loaded reference file "communication" buffers: 7
2020-10-11 14:22:49.711 INFO EDCORE: 0.009 s landscape4::lReferenceFile
2020-10-11 14:22:49.716 INFO EDTERRAINGRAPHICS41: 0.000351s Loaded reference file "crashmodels" buffers: 1
2020-10-11 14:22:49.716 INFO EDCORE: 0.000 s landscape4::lReferenceFile
2020-10-11 14:22:49.807 INFO EDTERRAINGRAPHICS41: 0.085697s Loaded reference file "crashmodelsfromedm" buffers: 22
2020-10-11 14:22:49.807 INFO EDCORE: 0.086 s landscape4::lReferenceFile
2020-10-11 14:22:49.837 INFO EDTERRAINGRAPHICS41: 0.025959s Loaded reference file "housedetails" buffers: 9
2020-10-11 14:22:49.837 INFO EDCORE: 0.026 s landscape4::lReferenceFile
2020-10-11 14:22:49.844 INFO EDTERRAINGRAPHICS41: 0.003396s Loaded reference file "industrial" buffers: 7
2020-10-11 14:22:49.844 INFO EDCORE: 0.003 s landscape4::lReferenceFile
2020-10-11 14:22:49.875 INFO EDTERRAINGRAPHICS41: 0.026320s Loaded reference file "misc" buffers: 3
2020-10-11 14:22:49.875 INFO EDCORE: 0.026 s landscape4::lReferenceFile
2020-10-11 14:22:49.886 INFO EDTERRAINGRAPHICS41: 0.006227s Loaded reference file "oilplatforms" buffers: 7
2020-10-11 14:22:49.886 INFO EDCORE: 0.006 s landscape4::lReferenceFile
2020-10-11 14:22:49.896 INFO EDTERRAINGRAPHICS41: 0.006233s Loaded reference file "tuapserefinery" buffers: 6
2020-10-11 14:22:49.896 INFO EDCORE: 0.006 s landscape4::lReferenceFile
2020-10-11 14:22:49.905 INFO EDTERRAINGRAPHICS41: 0.004649s Loaded reference file "vehicles" buffers: 9
2020-10-11 14:22:49.905 INFO EDCORE: 0.005 s landscape4::lReferenceFile
2020-10-11 14:22:49.914 INFO EDTERRAINGRAPHICS41: 0.004507s Loaded reference file "vessels" buffers: 7
2020-10-11 14:22:49.914 INFO EDCORE: 0.005 s landscape4::lReferenceFile
2020-10-11 14:22:49.926 INFO EDTERRAINGRAPHICS41: 0.008617s Loaded reference file "walls" buffers: 2
2020-10-11 14:22:49.926 INFO EDCORE: 0.009 s landscape4::lReferenceFile
2020-10-11 14:22:49.942 INFO EDTERRAINGRAPHICS41: 0.010335s Loaded reference file "americanbeech" buffers: 0
2020-10-11 14:22:49.942 INFO EDCORE: 0.010 s landscape4::lReferenceFile
2020-10-11 14:22:49.947 INFO EDTERRAINGRAPHICS41: 0.001066s Loaded reference file "caucasus_fir" buffers: 0
2020-10-11 14:22:49.947 INFO EDCORE: 0.001 s landscape4::lReferenceFile
2020-10-11 14:22:49.952 INFO EDTERRAINGRAPHICS41: 0.000813s Loaded reference file "cypress_oak" buffers: 0
2020-10-11 14:22:49.952 INFO EDCORE: 0.001 s landscape4::lReferenceFile
2020-10-11 14:22:49.957 INFO EDTERRAINGRAPHICS41: 0.000834s Loaded reference file "european_beech" buffers: 0
2020-10-11 14:22:49.957 INFO EDCORE: 0.001 s landscape4::lReferenceFile
2020-10-11 14:22:49.961 INFO EDTERRAINGRAPHICS41: 0.000630s Loaded reference file "green_ash" buffers: 0
2020-10-11 14:22:49.961 INFO EDCORE: 0.001 s landscape4::lReferenceFile
2020-10-11 14:22:49.966 INFO EDTERRAINGRAPHICS41: 0.000919s Loaded reference file "honey_mesquite" buffers: 0
2020-10-11 14:22:49.966 INFO EDCORE: 0.001 s landscape4::lReferenceFile
2020-10-11 14:22:49.972 INFO EDTERRAINGRAPHICS41: 0.001254s Loaded reference file "italiancypress" buffers: 0
2020-10-11 14:22:49.972 INFO EDCORE: 0.001 s landscape4::lReferenceFile
2020-10-11 14:22:49.979 INFO EDTERRAINGRAPHICS41: 0.001002s Loaded reference file "lombardypoplar" buffers: 0
2020-10-11 14:22:49.979 INFO EDCORE: 0.001 s landscape4::lReferenceFile
2020-10-11 14:22:49.984 INFO EDTERRAINGRAPHICS41: 0.001451s Loaded reference file "mountain_maple" buffers: 0
2020-10-11 14:22:49.984 INFO EDCORE: 0.001 s landscape4::lReferenceFile
2020-10-11 14:22:49.991 INFO EDTERRAINGRAPHICS41: 0.001008s Loaded reference file "norwayspruce" buffers: 0
2020-10-11 14:22:49.991 INFO EDCORE: 0.001 s landscape4::lReferenceFile
2020-10-11 14:22:49.998 INFO EDTERRAINGRAPHICS41: 0.000759s Loaded reference file "shrub" buffers: 0
2020-10-11 14:22:49.998 INFO EDCORE: 0.001 s landscape4::lReferenceFile
2020-10-11 14:22:49.998 INFO EDTERRAINGRAPHICS41: InstanceManager2 is completing initialization...
2020-10-11 14:22:50.002 INFO EDTERRAINGRAPHICS41: InstanceManager2::updateObjectDeclBuffer()
2020-10-11 14:22:50.002 INFO EDTERRAINGRAPHICS41: InstanceManager2::updateObjectLodDeclBuffer()
2020-10-11 14:22:50.004 INFO EDTERRAINGRAPHICS41: InstanceManager2 complete initialization:
2020-10-11 14:22:50.004 INFO EDTERRAINGRAPHICS41: objects: 666
2020-10-11 14:22:50.004 INFO EDTERRAINGRAPHICS41: subObjects: 493
2020-10-11 14:22:50.004 INFO EDTERRAINGRAPHICS41: objectLods: 2911
2020-10-11 14:22:50.004 INFO EDTERRAINGRAPHICS41: objectLodRenderItems: 330
2020-10-11 14:22:50.004 INFO EDTERRAINGRAPHICS41: MAX_LODS_IN_OBJECT: 10
2020-10-11 14:22:50.016 INFO EDCORE: 0.000 s landscape5::OceanFile
2020-10-11 14:22:51.136 INFO EDCORE: 1.115 s landscape5::GrassFile
2020-10-11 14:22:51.141 INFO EDCORE: 0.000 s landscape5::lModels5File
2020-10-11 14:22:51.401 WARNING LOG: 16 duplicate message(s) skipped.
2020-10-11 14:22:51.401 INFO EDTERRAINGRAPHICS41: remapper.deformers is not empty
2020-10-11 14:22:51.751 INFO EDTERRAINGRAPHICS41: materialParams[29084]*1536
2020-10-11 14:22:51.754 INFO EDCORE: 0.507 s landscape5::Surface5File
2020-10-11 14:22:51.784 INFO EDTERRAINGRAPHICS41: materialParams[810]*1536
2020-10-11 14:22:51.784 INFO EDCORE: 0.026 s landscape5::SurfaceTile
2020-10-11 14:22:51.790 INFO EDCORE: 0.001 s landscape5::Scene5File
2020-10-11 14:22:51.829 INFO EDCORE: 0.036 s landscape4::lRoutesFile
2020-10-11 14:22:51.867 INFO EDCORE: 0.034 s landscape4::lSurfaceDetails2File
2020-10-11 14:22:51.884 INFO EDTERRAINGRAPHICS41: materialParams[1]*1536
2020-10-11 14:22:51.884 INFO EDCORE: 0.013 s landscape4::lSuperficialFile
2020-10-11 14:22:51.908 INFO EDCORE: 0.020 s landscape4::lGeoNamesFile
2020-10-11 14:22:51.913 INFO EDCORE: 0.000 s landscape5::sup5File
2020-10-11 14:22:51.921 WARNING LOG: 1 duplicate message(s) skipped.
2020-10-11 14:22:51.921 INFO EDCORE: 0.000 s landscape5::navGraph5File
2020-10-11 14:22:51.921 INFO EDTERRAINGRAPHICS41: ITerrainGraphicsImpl4::openTerrain() END 7.889645 s
2020-10-11 14:22:51.989 ERROR_ONCE DX11BACKEND: render target 'mainDepthBuffer_copy' not found
2020-10-11 14:22:51.989 ERROR_ONCE DX11BACKEND: render target 'DummyShadowMap' not found
2020-10-11 14:23:26.265 ERROR EDCORE: can't open MO-file D:\SteamLibrary\steamapps\common\DCSWorld\l10n\cn\LC_MESSAGES\
2020-10-11 14:23:26.266 ERROR EDCORE: can't open MO-file D:\SteamLibrary\steamapps\common\DCSWorld\l10n\cs\LC_MESSAGES\
2020-10-11 14:23:26.266 ERROR EDCORE: can't open MO-file D:\SteamLibrary\steamapps\common\DCSWorld\l10n\de\LC_MESSAGES\
2020-10-11 14:23:26.267 ERROR EDCORE: can't open MO-file D:\SteamLibrary\steamapps\common\DCSWorld\l10n\es\LC_MESSAGES\
2020-10-11 14:23:26.268 ERROR EDCORE: can't open MO-file D:\SteamLibrary\steamapps\common\DCSWorld\l10n\fr\LC_MESSAGES\
2020-10-11 14:23:26.309 ERROR EDCORE: can't open MO-file D:\SteamLibrary\steamapps\common\DCSWorld\l10n\jp\LC_MESSAGES\
2020-10-11 14:23:26.345 ERROR EDCORE: can't open MO-file D:\SteamLibrary\steamapps\common\DCSWorld\l10n\pl\LC_MESSAGES\
2020-10-11 14:23:26.346 ERROR EDCORE: can't open MO-file D:\SteamLibrary\steamapps\common\DCSWorld\l10n\ru\LC_MESSAGES\
2020-10-11 14:23:41.607 INFO Dispatcher: loadMission C:\Users\ApBoy\AppData\Local\Temp\DCS\tempMission.miz
2020-10-11 14:23:41.607 INFO WORLDGENERAL: loading mission from: "C:\Users\ApBoy\AppData\Local\Temp\DCS\tempMission.miz"
2020-10-11 14:23:41.695 INFO EDCORE: (dDispatcher)enterToState_:4
2020-10-11 14:23:41.695 INFO Dispatcher: Terrain theatre Caucasus
2020-10-11 14:23:41.734 INFO Dispatcher: Start
2020-10-11 14:23:41.912 INFO Dispatcher: Terrain theatre Caucasus
2020-10-11 14:23:41.914 INFO TERRAIN: lSystem::load(./Mods/terrains/Caucasus\terrain.cfg.lua)
2020-10-11 14:23:41.914 INFO TERRAIN: lSystem::CleanScenes()
2020-10-11 14:23:41.914 INFO TERRAIN: lSystem::InitScenes()
2020-10-11 14:23:41.914 INFO EDTERRAIN4: lTerraDispatchImpl::setDate( day=18, month=11)
2020-10-11 14:23:41.914 INFO EDTERRAIN4: switch to season = autumn
2020-10-11 14:23:41.914 INFO EDTERRAIN4: switchTextures (season=2, minTexture=false)
2020-10-11 14:23:42.526 INFO DX11BACKEND: Reloading textures ...
2020-10-11 14:23:47.486 WARNING GRAPHICSCORE: already registered Renderer callback
2020-10-11 14:23:47.492 INFO VISUALIZER: StartSimulation
2020-10-11 14:23:47.993 INFO VISUALIZER: cascade shadows init (preset:'default' quality:4 layers:4 size:4096)
2020-10-11 14:23:48.869 ERROR_ONCE DX11BACKEND: texture '' not found. Asked from 'EFFECTS2'
2020-10-11 14:23:50.385 ERROR_ONCE DX11BACKEND: texture 'LiquidAnimationAlphas' not found. Asked from 'EFFECTS2'
2020-10-11 14:23:50.385 ERROR_ONCE DX11BACKEND: texture 'LiquidAnimationNormals' not found. Asked from 'EFFECTS2'
2020-10-11 14:23:51.331 INFO Dispatcher: initial random seed = 6230979
2020-10-11 14:23:51.331 INFO Dispatcher: apply random seed = 6230979
2020-10-11 14:23:53.818 INFO WORLDGENERAL: loaded from mission Scripts/World/GPS_GNSS.lua
2020-10-11 14:23:55.957 INFO WORLDGENERAL: loaded from mission Config/View/SnapViewsDefault.lua
2020-10-11 14:23:55.965 INFO WORLDGENERAL: loaded from mission Config/View/View.lua
2020-10-11 14:23:55.975 INFO WORLDGENERAL: loaded from mission Config/View/Server.lua
2020-10-11 14:23:56.577 INFO Config: netview started
2020-10-11 14:23:57.705 INFO VISUALIZER: CameraIndependedPreload()
2020-10-11 14:23:57.705 INFO VISUALIZER: CameraIndependedPreload() finished
2020-10-11 14:23:57.705 INFO DCS: use_xRay: no
2020-10-11 14:24:17.625 INFO DCS: MissionSpawn:initScript
2020-10-11 14:24:17.625 INFO DCS: MissionSpawn:spawnCoalition red
2020-10-11 14:24:17.625 INFO DCS: MissionSpawn:spawnPlanes 18
2020-10-11 14:24:19.322 INFO DCS: MissionSpawn:spawnVehicles 24
2020-10-11 14:24:20.877 INFO GRAPHICSVISTA: Creating Resource "Unicode" of type 1
2020-10-11 14:24:21.800 INFO DCS: MissionSpawn:spawnVehicles 27
2020-10-11 14:24:21.803 INFO DCS: MissionSpawn:spawnVehicles 37
2020-10-11 14:24:22.260 INFO DCS: MissionSpawn:spawnPlanes 38
2020-10-11 14:24:22.318 INFO DCS: MissionSpawn:spawnHelicopters 0
2020-10-11 14:24:23.478 INFO DCS: MissionSpawn:spawnVehicles 0
2020-10-11 14:24:23.864 INFO DCS: MissionSpawn:spawnVehicles 43
2020-10-11 14:24:24.491 INFO DCS: MissionSpawn:spawnVehicles 19
2020-10-11 14:24:24.975 INFO DCS: MissionSpawn:spawnVehicles 47
2020-10-11 14:24:25.054 INFO DCS: MissionSpawn:spawnCoalition blue
2020-10-11 14:24:25.054 INFO DCS: MissionSpawn:spawnVehicles 16
2020-10-11 14:24:25.768 INFO DCS: MissionSpawn:spawnVehicles 15
2020-10-11 14:24:26.161 INFO DCS: MissionSpawn:spawnPlanes 9
2020-10-11 14:24:27.207 INFO DCS: MissionSpawn:spawnPlanes 2
2020-10-11 14:24:27.259 INFO DCS: MissionSpawn:spawnHelicopters 2
2020-10-11 14:24:29.025 INFO DCS: MissionSpawn:spawnVehicles 2
2020-10-11 14:24:31.391 INFO DCS: MissionSpawn:spawnLocalPlayer 62,F-16C_50
2020-10-11 14:24:31.973 INFO SECURITYCONTROL: Loaded ./Mods/aircraft/F-16C/bin/F16C.dll
2020-10-11 14:24:38.276 WARNING EDCORE: Source ./Mods/aircraft/F-16C/Cockpit/Scripts/../Shape is already mounted to the same mount /models/.
2020-10-11 14:24:38.757 INFO VISUALIZER: cockpit ILV loaded
2020-10-11 14:24:39.133 ERROR_ONCE DX11BACKEND: Can't load 'Fonts/' in texture array ''.
2020-10-11 14:24:40.122 ERROR COCKPITBASE: devices_keeper::link_all: unable to find link target 'SMS' for device 'MAV_INTERFACE'
2020-10-11 14:24:41.652 ERROR COCKPITBASE: controller "SMS_AG_Harm_TER_TBL" missed in class cockpit::F16::ccMFD_F16
2020-10-11 14:24:44.257 WARNING LOG: 1 duplicate message(s) skipped.
2020-10-11 14:24:44.257 INFO COCKPITBASE: lua state still active DED, 26 (status undefined)
2020-10-11 14:24:44.257 INFO COCKPITBASE: lua state still active EHSI, 28 (status undefined)
2020-10-11 14:24:44.258 INFO COCKPITBASE: lua state still active UHF_RADIO, 36
2020-10-11 14:24:44.258 INFO COCKPITBASE: lua state still active VHF_RADIO, 38
2020-10-11 14:24:44.258 INFO COCKPITBASE: lua state still active INTERCOM, 39 (status undefined)
2020-10-11 14:24:44.259 INFO COCKPITBASE: lua state still active MACROS, 52 (status undefined)
2020-10-11 14:24:44.259 INFO COCKPITBASE: lua state still active TGP_INTERFACE, 58 (status undefined)
2020-10-11 14:24:44.666 ERROR SOUND: source_add(host:COCKPIT_MAIN, proto:Aircrafts/F-16/Cockpits/GearLockDown_In, alt_proto:Aircrafts//Cockpits/GearLockDown_In): can't find proto
2020-10-11 14:24:44.697 WARNING LOG: 1 duplicate message(s) skipped.
2020-10-11 14:24:44.697 INFO WORLDGENERAL: loaded from mission Scripts/World/birds.lua
2020-10-11 14:24:44.697 INFO DCS: dbox not found , skip
2020-10-11 14:24:46.709 INFO EDTERRAINGRAPHICS41: surface5 gc() LOD 0 0 squares
2020-10-11 14:24:46.709 INFO EDTERRAINGRAPHICS41: surface5 gc() LOD 1 0 squares
2020-10-11 14:24:46.709 INFO EDTERRAINGRAPHICS41: surface5 gc() 0.035400 ms
2020-10-11 14:24:46.813 INFO VISUALIZER: Preload() camera=15734.308756, 2023.594708, 233822.516476 radius=60000.000000
2020-10-11 14:24:46.813 INFO EDTERRAINGRAPHICS41: ITerrainGraphicsImpl4::forceLoading(): pos=(15734.3, 2023.59, 233823), radius=60000
2020-10-11 14:24:49.285 INFO EDCORE: try to write dump information
2020-10-11 14:24:49.287 INFO EDCORE: # -------------- 20201011-142449 --------------
2020-10-11 14:24:49.287 INFO EDCORE: DCS/ (x86_64; Windows NT 10.0.18363)
2020-10-11 14:24:49.289 INFO EDCORE: C:\WINDOWS\SYSTEM32\VCRUNTIME140.dll
2020-10-11 14:24:49.289 INFO EDCORE: # C0000005 ACCESS_VIOLATION at 10841637 00:00000000
2020-10-11 14:24:49.292 INFO EDCORE: SymInit: Symbol-SearchPath: '.', symOptions: 534, UserName: 'ApBoy'
2020-10-11 14:24:49.294 INFO EDCORE: OS-Version: 10.0.18363 () 0x300-0x1
2020-10-11 14:24:49.688 INFO EDCORE: 0x0000000000001637 (VCRUNTIME140): memcpy + 0x347
2020-10-11 14:24:49.688 INFO EDCORE: 0x000000000000988B (renderer): RenderAPI::openShader + 0x48B
2020-10-11 14:24:49.690 INFO EDCORE: 0x0000000000009280 (renderer): RenderAPI::openFromBlobShader + 0x180
2020-10-11 14:24:49.691 INFO EDCORE: 0x0000000000067D31 (metaShader): BaseBinder::render + 0x11431
2020-10-11 14:24:49.691 INFO EDCORE: 0x00000000000676AB (metaShader): BaseBinder::render + 0x10DAB
2020-10-11 14:24:49.691 INFO EDCORE: 0x000000000006BCCE (metaShader): BaseBinder::render + 0x153CE
2020-10-11 14:24:49.691 INFO EDCORE: 0x000000000000C624 (metaShader): render::MetaShaderManager::loadMetaShader + 0x174
2020-10-11 14:24:49.691 INFO EDCORE: 0x0000000000054101 (metaShader): RenderAPI::loadMetaShader + 0x41
2020-10-11 14:24:49.692 INFO EDCORE: 0x0000000000006604 (metaShader): render::MetaShader::open + 0x34
2020-10-11 14:24:49.692 INFO EDCORE: 0x00000000000990C8 (edterrainGraphics41): createInstancerRenderable + 0x6598
2020-10-11 14:24:49.693 INFO EDCORE: 0x000000000009B275 (edterrainGraphics41): createInstancerRenderable + 0x8745
2020-10-11 14:24:49.693 INFO EDCORE: 0x00000000000D9827 (edterrainGraphics41): CreateITerrainGraphics + 0x2227
2020-10-11 14:24:49.693 INFO EDCORE: 0x00000000000DAC19 (edterrainGraphics41): CreateITerrainGraphics + 0x3619
2020-10-11 14:24:49.693 INFO EDCORE: 0x00000000000F3B2D (edterrainGraphics41): edtg41::lMaterialParamsArrayGraphics::clear + 0xD5D
2020-10-11 14:24:49.693 INFO EDCORE: 0x0000000000063AE8 (edterrainGraphics41): edtg41::TerrainRenderable::dumpRenderItem + 0x531D8
2020-10-11 14:24:49.693 INFO EDCORE: 0x00000000000642EF (edterrainGraphics41): edtg41::TerrainRenderable::dumpRenderItem + 0x539DF
2020-10-11 14:24:49.694 INFO EDCORE: 0x0000000000063DF9 (edterrainGraphics41): edtg41::TerrainRenderable::dumpRenderItem + 0x534E9
2020-10-11 14:24:49.694 INFO EDCORE: 0x000000000006256E (edterrainGraphics41): edtg41::TerrainRenderable::dumpRenderItem + 0x51C5E
2020-10-11 14:24:49.694 INFO EDCORE: 0x0000000000060913 (edterrainGraphics41): edtg41::TerrainRenderable::dumpRenderItem + 0x50003
2020-10-11 14:24:49.694 INFO EDCORE: 0x0000000000060941 (edterrainGraphics41): edtg41::TerrainRenderable::dumpRenderItem + 0x50031
2020-10-11 14:24:49.695 WARNING LOG: 4 duplicate message(s) skipped.
2020-10-11 14:24:49.695 INFO EDCORE: 0x0000000000066220 (edterrainGraphics41): edtg41::TerrainRenderable::dumpRenderItem + 0x55910
2020-10-11 14:24:49.695 INFO EDCORE: 0x00000000000658FC (edterrainGraphics41): edtg41::TerrainRenderable::dumpRenderItem + 0x54FEC
2020-10-11 14:24:49.696 INFO EDCORE: 0x00000000000D0C15 (edterrainGraphics41): createInstancerRenderable + 0x3E0E5
2020-10-11 14:24:49.696 INFO EDCORE: 0x000000000011F30E (Visualizer): TerrainRenderer::forceLoading + 0x7E
2020-10-11 14:24:49.715 INFO EDCORE: 0x000000000014427E (Visualizer): smSceneManager::CreateSceneManager + 0x372E
2020-10-11 14:24:49.715 INFO EDCORE: 0x00000000007267A7 (DCS): CoreUtils::TempFilesManager::operator= + 0x3B8B77
2020-10-11 14:24:49.719 INFO EDCORE: 0x00000000007114D0 (DCS): CoreUtils::TempFilesManager::operator= + 0x3A38A0
2020-10-11 14:24:49.719 INFO EDCORE: 0x000000000011C27A (edCore): Common::FSM::sendOutputSymbol_ + 0x4A
2020-10-11 14:24:49.719 INFO EDCORE: 0x000000000011B912 (edCore): Common::FSM::enterToState_ + 0xC2
2020-10-11 14:24:49.719 INFO EDCORE: 0x000000000011C0F9 (edCore): Common::FSM::onSymbol_ + 0x1A9
2020-10-11 14:24:49.720 INFO EDCORE: 0x00000000007243A5 (DCS): CoreUtils::TempFilesManager::operator= + 0x3B6775
2020-10-11 14:24:49.720 INFO EDCORE: 0x00000000006F6604 (DCS): CoreUtils::TempFilesManager::operator= + 0x3889D4
2020-10-11 14:24:49.720 INFO EDCORE: 0x00000000006F69C9 (DCS): CoreUtils::TempFilesManager::operator= + 0x388D99
2020-10-11 14:24:49.720 INFO EDCORE: 0x00000000016E8CEB (DCS): AmdPowerXpressRequestHighPerformance + 0xB1ACE7
2020-10-11 14:24:49.722 INFO EDCORE: 0x00000000008E261E (DCS): CoreUtils::TempFilesManager::operator= + 0x5749EE
2020-10-11 14:24:49.724 INFO EDCORE: 0x0000000000017BD4 (KERNEL32): BaseThreadInitThunk + 0x14
2020-10-11 14:24:49.724 INFO EDCORE: 0x000000000006CE51 (ntdll): RtlUserThreadStart + 0x21
2020-10-11 14:24:52.510 INFO EDCORE: Minidump created.
2020-10-11 14:24:52.520 INFO DCS: enumerating loaded modules
=== Log closed.
submitted by buddy1225 to dcs [link] [comments]

[TUTORIAL] How to use Multi-Monitors with Hybrid Graphics Card Intel-Nvidia in notebooks (tried with: Asus Rog Strix G531-GT) - DEBIAN BUSTER

Hello guys! I`m going to do this tutorial because i tried to use multi-monitor in my laptop for a long time and that was a big problem for my case.
This tutorial is for people who have a hybrid graphics card and bumblebee in debian.
My case:
- Rog Strix G531-GT (notebook)
- Intel® UHD Graphics 630
- GTX 1650

So, to it work, first you need to install all the NVIDIA drivers and get it working with the optirun command.
In my case i tried stable nvidia drivers which was Version 418.152, but it have some bugs after install when i tried to configure the xorg.conf file, which when start says something about missing device "mouse0". I reinstall all the debian and tried to use the backports, which have the Version 440.100 (via buster-backports) of nvidia drivers, and it installed well.
FIRST, VERY IMPORTANT: You should check which driver is okay for you, maybe trying one, if that is good and u dont see "bugs" when trying to configure, use it... In my case 418.152 give me a lot of bugs... i tried 440.100 and it worked ok. If you are using backports, try to download everything at the BACKPORTS, and not the STABLE one! If u are using the STABLE one, continues using the STABLE
To do it, first add the backport repository to /etc/apt/sources.list, which actually is
deb buster-backports main contrib non-free
deb-src buster-backports main contrib non-free

After that, to install linux headers and nvidia-driver do:
- apt update
- apt install -t buster-backports linux-headers-amd64
- apt install -t buster-backports nvidia-driver

Reboot and after that u already have the nvidia-drivers installed, BUT not working because the system dont use the nvidia driver by default. Next step is installation of two packages: bumblebee-nvidia and primus. So now you need to install bumblebee:
- apt install -t buster-backports bumblebee-nvidia primus
- apt install -t buster-backports mesa-utils \you will need the) mesa-utils too for some commands
I didnt need permissions to use the bumblebee commands, but if you need, follow that Post-installation

You may need to blacklist the nouveau drivers, because we are using the nvidia proprietary drivers. To do it, run:
- $ sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
- $ sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
then run
- $ cat /etc/modprobe.d/blacklist-nvidia-nouveau.conf
And the output should be like that:
blacklist nouveau
options nouveau modeset=0
The nouveau drivers are blacklisted successfully!

Now we have a lot of configurations to do.
The next thing to do is go to /etc/bumblebee/bumblebee.conf and open with nano.
add - Driver=nvidia
it should looks like:
# Configuration file for Bumblebee. Values should **not** be put between quotes ## Server options. Any change made in this section will need a server restart # to take effect. [bumblebeed] # The secondary Xorg server DISPLAY number VirtualDisplay=:8 # Should the unused Xorg server be kept running? Set this to true if waiting # for X to be ready is too long and don't need power management at all. KeepUnusedXServer=false # The name of the Bumbleblee server group name (GID name) ServerGroup=bumblebee # Card power state at exit. Set to false if the card shoud be ON when Bumblebee # server exits. TurnCardOffAtExit=false # The default behavior of '-f' option on optirun. If set to "true", '-f' will # be ignored. NoEcoModeOverride=false # The Driver used by Bumblebee server. If this value is not set (or empty), # auto-detection is performed. The available drivers are nvidia and nouveau # (See also the driver-specific sections below) Driver=nvidia # Directory with a dummy config file to pass as a -configdir to secondary X XorgConfDir=/etc/bumblebee/xorg.conf.d # Xorg binary to run XorgBinary=/uslib/xorg/Xorg ## Client options. Will take effect on the next optirun executed. [optirun] # Acceleration/ rendering bridge, possible values are auto, virtualgl and # primus. Bridge=auto # The method used for VirtualGL to transport frames between X servers. # Possible values are proxy, jpeg, rgb, xv and yuv. VGLTransport=proxy # List of paths which are searched for the primus when using # the primus bridge PrimusLibraryPath=/uslib/x86_64-linux-gnu/primus:/uslib/i386-linux-gnu/primus # Should the program run under optirun even if Bumblebee server or nvidia card # is not available? AllowFallbackToIGC=false # Driver-specific settings are grouped under [driver-NAME]. The sections are # parsed if the Driver setting in [bumblebeed] is set to NAME (or if auto- # detection resolves to NAME). # PMMethod: method to use for saving power by disabling the nvidia card, valid # values are: auto - automatically detect which PM method to use # bbswitch - new in BB 3, recommended if available 

After that, go to /etc/bumblebee/xorg.conf.nouveau and open with nano.
add - BusID "", ex. BusID "PCI:00:02:0" in the Section "Device" \ to see the ID of your graphic cards, run in console: lspci | egrep 'VGA|3D')
it should looks like:
# Configuration file for Bumblebee. Values should **not** be put between quotes ## Server options. Any change made in this section will need a server restart # to take effect. [bumblebeed] # The secondary Xorg server DISPLAY number VirtualDisplay=:8 # Should the unused Xorg server be kept running? Set this to true if waiting # for X to be ready is too long and don't need power management at all. KeepUnusedXServer=false # The name of the Bumbleblee server group name (GID name) ServerGroup=bumblebee # Card power state at exit. Set to false if the card shoud be ON when Bumblebee # server exits. TurnCardOffAtExit=false # The default behavior of '-f' option on optirun. If set to "true", '-f' will # be ignored. NoEcoModeOverride=false # The Driver used by Bumblebee server. If this value is not set (or empty), # auto-detection is performed. The available drivers are nvidia and nouveau # (See also the driver-specific sections below) Driver=nvidia # Directory with a dummy config file to pass as a -configdir to secondary X XorgConfDir=/etc/bumblebee/xorg.conf.d # Xorg binary to run XorgBinary=/uslib/xorg/Xorg ## Client options. Will take effect on the next optirun executed. [optirun] # Acceleration/ rendering bridge, possible values are auto, virtualgl and # primus. Bridge=auto # The method used for VirtualGL to transport frames between X servers. # Possible values are proxy, jpeg, rgb, xv and yuv. VGLTransport=proxy # List of paths which are searched for the primus when using # the primus bridge PrimusLibraryPath=/uslib/x86_64-linux-gnu/primus:/uslib/i386-linux-gnu/primus # Should the program run under optirun even if Bumblebee server or nvidia card # is not available? AllowFallbackToIGC=false # Driver-specific settings are grouped under [driver-NAME]. The sections are # parsed if the Driver setting in [bumblebeed] is set to NAME (or if auto- # detection resolves to NAME). # PMMethod: method to use for saving power by disabling the nvidia card, valid # values are: auto - automatically detect which PM method to use # bbswitch - new in BB 3, recommended if available # switcheroo - vga_switcheroo method, use at your own risk # none - disable PM completely # ## Section with nvidia driver specific options, only parsed if Driver=nvidia [driver-nvidia] # Module name to load, defaults to Driver if empty or unset KernelDriver=nvidia PMMethod=auto # colon-separated path to the nvidia libraries LibraryPath=/uslib/x86_64-linux-gnu/nvidia:/uslib/i386-linux-gnu/nvidia:/uslib/x86_64-linux-gnu:/uslib/i386-linux-gnu # comma-separated path of the directory containing and the # default Xorg modules path XorgModulePath=/uslib/nvidia,/uslib/xorg/modules XorgConfFile=/etc/bumblebee/xorg.conf.nvidia # If set to true, will always unload the kernel module(s) even with # PMMethod=none - useful for newer Optimus models on which the kernel power # management works out of the box to power the card on/off without bbswitch. AlwaysUnloadKernelDriver=false ## Section with nouveau driver specific options, only parsed if Driver=nouveau [driver-nouveau] KernelDriver=nouveau PMMethod=auto XorgConfFile=/etc/bumblebee/xorg.conf.nouveau 

Do the same in /etc/bumblebee/xorg.conf.nvidia, and put the ID of the Discrete Nvidia Card.
add - BusID ""
add - Option "AllowEmptyInitialConfiguration" "true"
and at the END of the file, add
Section "Screen" Identifier "Screen0" Device "DiscreteNVidia" EndSection 
it should look like:
Section "ServerLayout" Identifier "Layout0" Option "AutoAddDevices" "true" Option "AutoAddGPU" "false" EndSection Section "Device" Identifier "DiscreteNvidia" Driver "nvidia" VendorName "NVIDIA Corporation" # If the X server does not automatically detect your VGA device, # you can manually set it here. # To get the BusID prop, run `lspci | egrep 'VGA|3D'` and input the data # as you see in the commented example. # This Setting may be needed in some platforms with more than one # nvidia card, which may confuse the proprietary driver (e.g., # trying to take ownership of the wrong device). Also needed on Ubuntu 13.04. BusID "PCI:01:00:0" # Setting ProbeAllGpus to false prevents the new proprietary driver # instance spawned to try to control the integrated graphics card, # which is already being managed outside bumblebee. # This option doesn't hurt and it is required on platforms running # more than one nvidia graphics card with the proprietary driver. # (E.g. Macbook Pro pre-2010 with nVidia 9400M + 9600M GT). # If this option is not set, the new Xorg may blacken the screen and # render it unusable (unless you have some way to run killall Xorg). Option "ProbeAllGpus" "false" Option "AllowEmptyInitialConfiguration" "true" Option "NoLogo" "true" Option "UseEDID" "true" # Option "UseDisplayDevice" "none" EndSection Section "Screen" Identifier "Screen0" Device "DiscreteNVidia" EndSection 

At this point, the TEST for bumblebee should be working!
Install mesa-demos and use glxgears to test if if Bumblebee works with your Optimus system:
$ optirun glxgears -info
If it fails, try the following commands:
64 bit system:
$ optirun glxspheres64
32 bit system:
$ optirun glxspheres32
If the window with animation shows up, Optimus with Bumblebee is working.
Note: If glxgears failed, but glxspheresXX worked, always replace "glxgears" with "glxspheresXX" in all cases.
If the bumblebee still not working, you should look why isnt it working. You can ask me maybe i can help with some information! I tried a lot of things and maybe i can help.
now finally, you can run anything with the optirun command, like: optirun virtualbox... or optirun (a game) and it will work with you graphic card.
But still, when you connect a monitor at the HDMI output, the monitor will not work...
For that, finnaly, we can do that:
To use multi monitors, we need to see this section, which is what happen to me: Output wired to the NVIDIA chip
At this point, you may need to configure the /etc/X11/xorg.conf.d/20-intel.conf
and /etc/bumblebee/xorg.conf.nvidia, as it says in the tutorial. After that reboot your system and try again the command: optirun intel-virtual-output
It should finally works, if you have connected another monitor in HDMI output and try the command optirun intel-virtual-output, it will start in the monitor a continuation for the X session, which works pretty well!!

Well, that was hard to do for me, and i hope that information can help someone. If something is confusing or you cant do the second monitor work, just type in comments, i will try to help...

One important thing to do is: do not try to use xorg.conf file, just delete it and keep the linux to do it by itself. Every time which i tried to use the xorg.conf file it broke my gnome startup and i need to start debian in recovery mode and go to /etc/X11, and run rm -R xorg.conf (which delete the xorg file), or rename it to the linux do not read the informations there.
#TIPS: For a good use of that, you can go to debian keyboard configuration, and configure a new shortcut with the command optirun intel-virtual-output.
When you press ctrl+alt+y that will start the second monitor for you :D
so that is #learning_with_linux
submitted by MrMineToons to debian [link] [comments]

Let me tell you about Doomwood 3: Legacy of Darkness

If you haven't played the saga, go play the saga before I, saga, make you play the saga. Also this thing is spoiler tagged so yeah.
If you're tired and want a summary, well sure, I liked it but it had some minor flaws with storytelling, as do most AE stories. Shined in another aspect though which is at the bottom, overall good.
If you're bored, well grab some popcorn and turn down your brightness. You might be here for a while. I'm gonna tell you about each separate part of the saga and give an opinion on it, along with maybe a rating of some sort? I dunno, I might be too tired for that part. Anyways....
Starting with the initial cutscene, fighting undead with Artix is no surprised, if the saga takes place in doomwood. This is also the first time he's decked out in his ArchPaladin armour while being here, and the song, A Fight of Light and Darkness playing in the background got me interested and even a little hyped for what might follow. Rookie mistake. You can see everything starts to dip as soon as we introduce an actual potty joke that serves to be the driving force between Artix and us just happening to split up temporarily. I have to give credit to the animator (hopefully Ghost) as the Swerve through the enemies option in the cutscene surprised me on how clean it looked. After not barrel rolling, we get to the outhouse, only to be confronted by a nameless chrono who sends us to some point in the future and dies. I'm fine with the chrono to the future part, but the outhouse and abruptly dying just seem so out of place; they made him nameless so he could literally be our Uber driver to the future and just disappear so we have no way back. Ignoring this, we meet Stellaria, a pink paladin who just happens to be in the random time and place we've teleported to. Yay, convenient. She asks for our help and being a hero we do all of her quests until we spy on who looks to be the boss of the release, Kalron. Props for making him actually look like a cool fusion of undead and technology that looks like it use lasers. Basically, instead of just mindlessly killing, we figure out what they're doing, Kalron drones a guy who's apparently more important than the chronomancer, and we fight him. Blue screen of death, and that's the end of the first part, with the revelation that Stellaria is Artix's daughter, and Kyger the kid we helped has been napped.
I will end up ranking this part as the worst, solely based on the setting and how exactly we got here, along with the fact that Kyger at the time just seemed to be dead weight which is weird when you think about how apparently important he is later. Fighting undead > Overused RPG character bathroom joke > Getting teleported into the future but we don't know when > Chrono just dies > Suddenly help a pink paladin fight a random army created through the fusion of Undead and Tech? That just SOUNDS messy before you even play it. However, the quests in the section themselves do make sense, especially Kyger's efforts to save his friends and things, so it's fine there. Just seems a little choppy. Rewards are now great and there's a solid amount of things to farm so I won't spend too much on the set grinding aspect of this.
Onto the next part. I originally had this as the best part and I might change this, due to how the pacing felt nice, and it almost felt like a little larger than the average release would be, due to the inclusion of two maps and slightly long cutscenes combined with quests that follow the story and weren't tedious. However, the very first cutscene almost throws it away for me. Queenadent Odessa from what I've heard is an Easter egg from MQ, and she's accompanied by two guards of the force that slips my mind. Anyways, this cutscene is almost the definition of unnecessary, and just ends being disappointing. Odessa doesn't say she's gonna help, all she tells us is that there's a time machine, which I guess is useful info but we could've gotten that from somewhere else; the obvious info source we have relating to the undead techy guys. Leaves and never appears again and great we tell her our plans as well. Just a weird interaction. That aside, we have an awkward LOL moment with some random bioknight who wants the axe for his people, and we beat him up as per usual. Skip a bit and we're holding the axe, and speaking with Artix, which isn't too farfetched considering if he died, he'd just become a spirit orb that sticks with his own axe. AQW doesn't really do heartfelt conversations and tries to break up the tension with O_O Artix has multiple children jokes, but I still felt like this scene served its purpose. You know what I said about pacing earlier? Surprisingly this release is basically just halfway done now. Speeding through, we rescue kyger and fight against Kalron, who we vanquish, or at least clear his browser history and reboot his OS or something. More computer jokes yay. Everything here is fine, and it honestly felt like I had a lot to play through, which is why I'm putting it near the top, if not on top. Also did some decent teases (although they weren't that important) with the scrolling binary and the switch between English and Binary making me actually want to go translate them myself. It also sets up a plan for the next release, which follows well.
Heading into stonewood deep, I'll give a quick summary. Asherion is Stellaria's big brother and the mole inside of the Deadtech fortress who now speaks to the Technolich directly, Artix has three children who we've all met now, and we're going to go teach Kyger how to be a paladin/archpaladin/warrior with rogue regen or something. After teaching kyger some actually important lessons, we whip out the old battle on line and defeat the boss of this week. They also say the probability of us succeeding in this next mission is smaller than the chance of triggering PWD. This one is either second, maybe even first on the list, as it also felt decently lengthy, and had some mechanics I haven't seen in a while. We had to build training dummies then fight those enemies, and we also just found a base of undead who we didn't massacre for no reason, which actually shows that we aren't just heartless. it's implied Kyger somehow actually helps us against Sir Kut which is unrealistic but whatever, kid somehow can wield an axe with one hand at like the age of what, 13? Self-inserts really don't work all the time do they...However the release ends with what I would call a wholesome photo montage that fades to a bleak looking success chance which, I guess you take any enjoyment you can get right?
Finally the Finally. I mean finale. 3rd on the list, as I don't know what I was expecting but this was not it. In short, It's a war without Odessa, Asherion opens the door, we fight a mad weak mini mini boss, into the boss, into the boss v2. Anything in these cutscenes feels like odd details just attached to quests. First cutscene, I can assume vortrix sends the Chronomancer, which goes against what we've already said and things, and it also seems like vortrix literally knows what is going to happen. Second one, they remodeled the pally armour, stuck skulls on it and gave it some red tech upgrades and called it vortrix. So much for something threatening. Not only that, Vortrix says the exact same thing Kalron does about their objective, and the next part is literally, Kyger swings the axe to get first hit, then leaves the room and we take on the boss. The transformation cutscene is surprisingly underwhelming. It just seemed like deadtrix took a shot then he turned into a black blob and grew. Nothing even behind it, just 2nd form thank you. Thank goodness the bosses actually do some decent damage with ranges in the 300s. Even that's not that much when it comes down to it. Final cutscene is

so dang disappointing. Even the photo montage isn't that important as it literally teleported twilly who was NOWHERE TO BE FOUND in the first cutscene into a random undead invasion for a stinky poop joke. I don't mind the cheers in the future, as those three are just celebrating their victory over a photo of us doing what we do best, while in our time, we're busy riding an outhouse down a hill. It ends with a moral and a powerpoint effect saying we beat the saga.
Ironically, where this saga actually shines is in the rewards. Each of the parts in the story had its own new rewards along with some daily gifts, and this accumulated to make one huge merge shop you can sift through for cool things. Along with a new BLoD "grind" and a couple of other neat looking undeadslaying boosted weapons. But story wise, no no no we don't do that here.
Remove Odessa and replace her with someone else we can learn the deadtech's objectives from other than just "spying" and that'll solidify my opinion of the second part starting in stonewood as the best. Did I mention Stonewood and the Tech Dungeon also have what seems to be a new unique track? Solid stuff but the order currently is as follows.
Stonewood/Tech Dungeon > Stonewood Deep > Tech Fortress > Thorngarde.
If you've been bored and made it here, lemme know what you think. I'm wasting hours writing about a flash game, so i need a break...
submitted by sagaosity to AQW [link] [comments]


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.


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.
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.
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


05, 2020

by chefdeletat
📷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.


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


23, 2020

by RandomTruffle
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/ 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/ 140 unique addresses InterestingRobloxProcess: 38928 unique addresses /uslib/x86_64-linux-gnu/ 1 unique addresses /uslib/x86_64-linux-gnu/ 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
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]

Making a super low cost trainer/dev kit. What do you wish you had in the kits/trainers you used to learn electronics?

Useless Backstory:
My original plan was to design a digital logic trainer for my students that could be submerged in alcohol without damage, to sanitize between classes. I did that and the prototypes work great (Other components for scale)
It's fair to assume the campus will close pretty quickly after the first spikes in covid cases. This means the original design won't be useful, students won't be in to share the equipment. Many departments plan to just gut their lab courses while some plan to throw huge tool/equipment costs at their students for at-home labs. I don't consider removing hands-on work a viable option, and equipment would cost a ton because the school store is terrible as far as where they can get products from, plus it takes its own cut of ~20%. The school store is the only way to pay for things with financial aid, so I have to go through them.
I priced everything out for my original design and discovered the board is so unbelievably cheap ($22 vs the $350 we pay for just ONE of the trainers the students use) that I plan to just make a new version that also includes all the features from the analog, processor, and plc trainers. Should cover everything from learning ohm's law to designing and testing amplifiers, from digital logic through assembly language up to C++/Python, from relay/ladder logic to PLC programming.
To the point:
For reference, here's a google image search of what I am designing a replacement for. Click on some at random and check the prices and specs. There's no reason they should cost hundreds. The ones that don't cost a ton are just switches and buttons and leds wired to headers - something anyone here can do for $10.
My goal is to add all the features from every single trainer I've seen/used but keep below 10% of the price of what is currently available. Each unit of equipment my students use (scopes, generators, supplies, digital/analog trainers, processor boards, plcs, etc) cost the department $5k+, and that's even after I got them to approve sparkfun as a vendor to save money. Assuming the students pick up shitty, low spec versions of everything for doing their labs at home, we're still looking at $1k. I like <$100 better, and would like the students to have something they can continue using to learn/develop electronics even after graduation.
So far I'm at $48 per trainer, completely assembled and in a case and I'm just about ready to make the next batch of prototypes but want to know what additional features I should cram into it.
What should I add that isn't listed below?
(1)+/- 19V 3A isolated supply
(2)+/- 5V 1.5A supplies
(1) 19V variable supply
(1) Constant-current linear regulated supply
(2) CV/CC switchmode supplies (fairly well filtered)
Power input is by default USB-C 20V/100W but I got impatient waiting on the USB-C sockets to come in the mail and rigged one up with a laptop DC jack (19.5V) for testing. I liked it. Most people have a box of old adapters in their house so I might just throw empty spots all around the back edge with the traces and pads for 10 different types of sockets so that anyone can use any supply they have lying around within the 18-34v 3A+ range. It already has overvoltage/undervoltage/overcurrent protection, adding a receiver for laptop signal pins that tell the system what the power brick is rated for would be easy.
There's also a USB micro-b port that can power everything but the analog supplies. It is also used for reprogramming firmware in the event of serious corruption, but updates and changes by default occur over wifi.
(1) 500mA Isolated Function Generator (12.5Mhz)
(1) function generator that acts as a 16.5V 1A CT transformer output (max 1mhz)
(2) digital clocks (1hz - 40khz)
(1) digital clock (1khz to 200mhz)
(24) 50mA 3-state digital outputs, protected from short circuits to any other line on the board, including the analog voltages. Each is configurable to a switch, button, low frequency clock, or tied to the PLC emulator or processor used for teaching programming.
Wifi/Bluetooth, USB client and host, Modbus TCP/IP, Modbus RTU, CAN bus, i2c, i2s, spi, plus anything slow enough to be bitbanged will also be available as a feature through the UI, but not have a dedicated port. For example, you can load a 1-24 bit binary string in through the switches and shift it into 74000 series shift registers.
(4) Multimeters with 10mV precision, two of which are differential and isolated.
(24) 3-state digital inputs (+/- 20V capable, configurable logic levels)
(2) analog inputs (1Msps) - I hesitate to call it an oscilloscope because the next revision will include an FPGA that can actually handle huge amounts of data at high frequency. For now it dumps the data to a RAM IC and the main processor grabs a selection of addresses and renders a graph on the screen. There's no interrupts or anything that could get sub-clockcycle measurements on transitions directly from that data.
(2) 100mhz counters with automatic or adjustable trigger.
User Interface:
3.5" color touch screen - while every feature can be accessed from the touch screen, it's mostly for configuring things. I've made sure to put all features as physical buttons, switches, and knobs.
Wifi AP with captive portal - same access as the touch screen, but also used for uploading code to the processors (ASM ide and arduino ide) or PLC emulator (openplc). Working with a friend to help ensure mobile/tablet compatibility.
Bluetooth - available but not currently used.
IC testing with learning function - throw any common DIP chip into a socket and it will test whether it's fried. The UI also allows you to add in new chips, where you define which pins are inputs, outputs, power, ground, oscillator, analog, etc and whether you want it to automatically learn from every possible input configuration or a set sequence of commands. This includes i2c/spi chips.
Programming microcontrollers - throw a dip uC into the same socket as the ic tester and it'll configure itself to whatever pinout you define or select from a list. Already have a USB ISP for AVR but will add loads of ports matching the most popular in-system-programmers.
Matrix I/O sniffing - plug any matrix keypad or matrix led display into the I/O lines and it will automatically map them for you.
Communications sniffing - find IR remote codes, i2c addresses, RF codes, etc without external circuitry.
Compatibility with the Analog Discovery 2, Atmel ICE, LabView/Multisim, and I'm tinkering with SCPI to connect to bench equipment.
PLC Programming through OpenPLC.
Full diagnostic utility with schematic and fault indication through the UI. It will literally tell you what is wrong within a 1 centimetre radius on the board, show you the PCB/silkscreen of the area and optionally the schematic, and tell you what to replace to fix it. I added fault detection with port expanders, analog multiplexers, and dummy loads to help me test my original prototypes. It was supposed to be temporary but the work is already done and only added $5 to the total cost so now it's going to be in every future revision. Not a big jump to add pictures of every subcircuit PCB traces/silkscreen.
As an added note, when I'm done with each set of prototypes I plan to give them away on this subreddit for free, but I want to be sure there's no liability on my part. I'm concerned because all but the last version won't have UL/FCC/CE compliance. If anyone could direct me to information on this sort of thing, I'd really appreciate it. I'm thinking maybe I just directly call them "as-is" or defective or scrap?
submitted by -Mikee to arduino [link] [comments]

Tried Logistic Regression - What Next? (classification problem)

I have data which is a mix of continuous variables and ordinal/categorical variables which I have created dummies for. I have tried to fit a logistic regression model to do binary or multiclass one vs rest classification. However the accuracy isn't great (not entirely unexpected) so now I am wondering where to go from here:
  1. Is it likely another model will give better results than logistic regression? Or is it just my data is not well correlated with the dependent variables?
  2. What other models should I be looking to try? I see has many options for classification but what should I start with?
submitted by nickzsnz to learnmachinelearning [link] [comments]


He still came around making trouble, but oddly enough, our little cul-de-sac corner was more-or-less Batshit Crazy-free for the next 34 months.
After that, things sort of calmed down. Well, one of his older boys thought it would be fun to attack Khris, push her off her bike, and try and steal the Uzbek sapphire amulet I had gotten her years earlier.
Khris is not a small girl; she is a corn-fed daughter of the vast cow-pocked hills and rolling pastures of Baja Canada. She didn’t take lightly to some weasely little Arab probably future pole-smokers trying to steal from and assaulting her.
It took more than one punch, but Khris coldcocked the elder of the Guano Insano clan and laid him out so an undertaker could have taken easy measurements. Oh, he was still breathing, but I nevertheless think he was shammin’, playin’ possum until Daddy Dearest could come and rescue him from the rage of wrathful Wisconsinians.
Liam and I were sitting in the porch area of his villa, smoking cigars, drinking our sunrisers, watching the tableau unfold. We both thought Khris handled the situation well, particularly the outcome. The miscreant was out cold’n a foundered mackerel and Khris didn’t heel-stamp him in the chuckle-bits nor curb-stomp his head even though he had initially, and without provocation, punched Khris in the head.
Major stylistic points, Khris.
After 6 or 7 of his offspring rant to alert him, Señor Srībaśita Inasēna came over to shovel his insensible frogspawn up off the tarmac. He was ranting and raving, screaming and splitting the air with threats, dark oaths and other forms of bad noise.
He headed straight for Khris to administer a smackdown, as Khris resolutely held her ground.
I merely stood up and asked Khris if she needed some help.
She replied in the negative, stating that this fool wasn’t going to be much more of a challenge than ‘his idiot kid’
I swear, he went, even more, batshit crazy. However, something clicked and Señor Srībaśita Inasēna looked over his shoulder to see not one, but two near-identical way-more-crazy than he extra-large people standing there, both with cigars and icy cold drinks. He suddenly seemed to experience a spate of total recall how one of the large apparitions said he’d begin him on his journey toward room temperature if he so much as sneered in our direction.
He scooped up his unconscious spawn, muttered something none of us could make out, and scurried back to his loathsome piece of home real estate.
That was more or less the end of our run-ins with Señor Srībaśita Inasēna and his extended tribe.
Swing forward to the late summer. The weather calmed a bit and one’s skin didn’t immediately bubble every time one went out to collect the local morning news-rag. Things were going well for the cul-de-sac; jobs were advancing apace, children were doing well in their various studies, people were, oh what was that word? Ah, yes, happy.
Happy people do fun things.
So, it was decided it was time we have a block party.
Of course, Liam came up with the brilliant idea that we should have a pig roast.
“Umm, Liam”, I ahemed, “In case you forgot, we live in an Arabic Muslim country in the Middle East. Pigs and pork and porcine parts are sort of verboten around here. “
“Ok, Rock”, Liam laughed, “I know that, you know that, my hat knows that. But we Brits must have our bacon, sausage, and chops. It’s in our DNA. Besides, I can get one flown in through my company; under the wire. I could sneak him over here easily. We’d just have to keep him under wraps until bar-be-que time rolls around. You’re from Texas, so…”
“Adopted native son” I corrected.
“Right”, Liam continued, “But you were from Baja Canada first, so you must know how to cook a whole pig…”
“That right, I do, but…, I said, “…you want to bring a live pig in here, and keep him for a while until we can sort out the cooking necessities. We can’t use the industrial-sized stoves in the rec center at the pool. That’d raise a few eyebrows…”
Es and Cassandra wander over, listen for a bit and exclaim “Are you both out of your tiny, little minds?”
I had to admit, as I poured Liam and myself a refill, that the idea did have a certain ‘Up Yours!’ mouthwatering bacon-scented charm.
So, all four of us sat outside and over beer, vodka, and white wine for the ladies, we brewed up a perhaps passable project for our pig party.
The thing was, I’d be gone offshore for a couple of weeks and the pig would have to live at someone’s villa, under wraps, for that time; which actually escalated to 3 months.
Esme, surprising as always, volunteered to take on the task.
Might have been the white wine talking, but she admitted to missing bacon as well.
“OK, but we’re going to need a bar-be-cue pit. Where and when?” Liam asked.
“I’ll talk to Shiehk Gungan and secure permission for a Hawaiian-style pit bar-be-cue for someone or other’s fake birthday. If we can get Vonn and Honey Bee on board, their villa’s backyard backs up to a tall brick wall bordering the alley behind the City Centre. I could put in a pit there easily, and it would be out of the purview of prying eyes.” I said.
“Good”, Casandra said, “Let me get the gin and tonic makin’s and get Vonn and Honey over here as well as Dane and Dyad. Gonna have a block party, make sure you invite the entire block.”
Over the term of the afternoon, we had our plans.
Liam would secure a pig for us; approximately 200-300 pounds, on the hoof. It’d stay in our backyard under both our sun tarp and Esme Srs.’ care until Pig Killin’ Time. Liam, Vonn, and I would handle that little chore. I’d get permission to ‘dig’ a pit and install the bar-be-cue pit in Honey and Vonn’s back yard. Liam and I would handle the actual roast, and we’d all chip in for charcoal and wood smokin’ chunks, and whatever else we could find.
Dyad said she knew many, many farmers it the area and many had fruit trees, in various stages of repair. Certainly, some of that would smoke up a treat. Persimmon, pomegranate, fig, mango, durian, banana…all the earmarks of a weird pig roast.
So we had a date, a plan and the ingredients for a complete fiasco. Since Sr. Guano Insano was no longer part of the picture, and as we had few interlopers, this might actually work without all of us being tossed into the hoosegow.
I’d liberate a bit of pit diggin’ materials from work, just a small amount of dynamite, C-4, and Primacord; I already had the blasting machines. Vonn and Liam would lay in the charcoal and wood for the actual pig roast and well, Bob’s your uncle.
I went offshore to complete the 12th well on the platform and had to deal with all the logistics, bureaucracy and other sanctioned horseshit that comes with the territory. It took almost exactly 3 weeks, and at that time, Esme’s initial negative reaction to pig-sitting had changed considerably.
She had named the critter and found it to be a rather clever, and even sociable, beast. She even allowed it free reign of our house.
The name she chose was one from an old, endearing structural professor: Prof Pinkus (Prof. Pink-ass).
This was an unforeseen complication.
“Es, remember, “ I said over the phone, “That pig is not a pet. It’s not your buddy. It’s not going shopping with you. It’s going to be the guest of honor at a block party. Perspective, please.”
“Oh, Rock”, Es gushed, “I know that. It just makes it easier to keep up with Prof. Pinkus if you treat him like a pet rather than livestock.”
“Es!”, I yell, “He IS livestock. Soon to be deadstock. Soon to be crisply pit barbequed to a crackly crunch. He’s not your friend, he’s breakfast, lunch, and dinner!”
“OK, love you too.” Es says, ignoring me, “See you soon. Safe flights. Keep the shiny side up.”
I hang up. “Oh, shit. This does not bode well.” I mused on the flight shoreward.
I have to admit, pigs can be personable animals. Canny, inquisitive, seemingly intelligent. But even so, that does not trump them being delicious, appetizing, and delectable generators of bacon. Prof. Pinkus is going to be ham, bacon, and sausage soon. Not a boon companion.
The next day I ‘dig’ the pit for the barbeque. I used a shovel for exactly 2 minutes and dynamite, C-4, and primacord for a few more. Vonn was astonished that I not only dug a 6’x6’x4’ wide hole in less than an afternoon, but that I did it while smoking a cigar, drinking an, ok, several icy adult beverages, and never even breaking a sweat in the hellish late summer heat.
The Bobcat with the mounted backhoe, which I had ‘borrowed’ from work, helped a little.
Liam wandered over after the pyrotechnics were done. He didn’t care for them as the noise ‘offended his ears’. Truth be told, he had seen enough pyro jobs go south in his line of work and wanted nothing to do with them. I assured him I was a licensed Master Blaster as well as the one and only Motherfucking Pro from Dover, but it took some time to get him up to speed on the use of explosives for fun and profit.
We let the pit settle, as it was in mostly in desert sand held together with a bit of aeolian clay, or loess. We kept it wet and covered with sheets of canvas. It’d be fine for our pit barbeque in the days hence.
Vonn, Liam and I fabricobbled a cover for the pit which was made of thatched palm fronds supported by ½” pine furring-strips frame along the outer surface. Dane found a hunk of tin stove pipe and we fashioned a nicely workable chimney for the cover. Once the fire was going, and the pig in its new home, we could set the cover over the pit, shovel earth over it to seal it off and use the iris-valve in the chimney to regulate airflow.
One looks at it now, it would almost appear that we knew what we were doing.
Probably nothing was further from the truth.
We needed to ‘season’ the pit, but first, we needed to line the pit with rocks. This serves to hold the heat, and will even out its distribution. But, all we have to use is limestone around here and if limestone ever gets wet, there might be water in the fractures of the rocks. Heat that up to over 1000C and you’ve got yourself a nifty little bomb.
Of course, this will not do…
So, I get on the phone with several ‘exotic’ marble companies in the big city of Duhu. I call around asking if they might have some scrap sheets of granite, quartzite, granodiorite or marble.
Sure, for a price.
However, there was this one place where I knew this guy…
He took in huge, and I mean 4m x 5m x 5m blocks of exotic rock from the subcontinent; black granite, “Reaping Equinox’ black and white ‘granite’; most all these ‘granites’ were granodiorites, Inferno Granite, Black Sunset granite sliced thin into façade facing dimension stone, it was absolutely gorgeous in cross-section. However, the best stuff was igneous-metamorphic, tougher than a $2 steak, and just laughed at diamond carbide saw blades.
“Oh, sure now Mr., Dr. Rock”, Mr. Prakash Dongerkerry, the owneoperator of one particular lot I scavenge for Esme’s continuing lapidary hobby, “I’ve got some beauty stuff here for you. But I need some help with these couple of blocks I received from Kerala. Great rock, very pretty, but too tough. Burn out many saws, boss. You can help maybe?”
“Sure, Prak”, I replied, “I can help, no sweat.”
So, next Friday Liam and me, we eased over to the granite factory, C-4, blasting caps and Primacord in hand. Prak was a little apprehensive about using high explosives in a densely populated area, but after Vonn reminded him that he was working with the Motherfucking Pro from Dover, he relaxed some.
I crawled all over those blocks, marking with orange spray paint the nature fractures, flaws, and features of each block. Asked Prak how he’d like them split, and he indicated parallel to the major axis.
It couldn’t be easier. There was a main body-fracture system normal to the σ1 stress direction. The one’s parallel to the σ2 and σ3 were minor and nowhere near as clearly developed.
I smooshed some C-4 into a test fracture, primed it and shot it without much ado. It was surprisingly quiet for a detonation. A cute little C-4 POP.
A large slab of rock fell off the main block, severed as nicely as a hunk of cold butter from a hot knife.
Prak was thrilled. I only had another 12 or so shots to go.
They all more or less came off as planned. One or two busted when they bounced, even after the addition of old car tires below where I was blasting.
Prak, good to his word, showed us a huge pile of 1.25” thick sawn quartzite slabs that were rejected for mostly cosmetic reasons. It takes a bit of math, a bit of doing, and a lot of C-4 to extract slabs enough to line our fire pit from stem to stern, top to bottom.
Once installed, the pit was a tad less wide, a bit less deep, and a smidge less long, but it was the only Precambrian-quartzite lined bar-be-que pit in this or any other known galaxy.
We celebrated the initial fire up with whiskey and hors-d'oeuvres. I stuck with vodka, ice, lime, citrus stuff, and a Jamaican cigar.
The pit flared from the amount of dry wood we initially used. It burned very quickly into a pile of glowing embers. Now, we added some local lump charcoal and popped on the top, now sporting an exhaust chimney with a rather large, intrinsically-safe, unusually commercial-looking dual-temperature thermometer that somehow just appeared out of the ether.
We took it all the way up to 1,000C. Although it was designed for ‘low and slow’, we wanted to see how it would perform under alternative conditions.
We let it simmer for a few hours, then decided to kill the fire by closing the iris valve. Thus deprived of oxygen, given a few hours, the pit would be cold to the touch.
The next day, we opened the pit and shoveled out the dead embers. The pit was well and truly cold. Upon examination, it seems that the quartzite had fused to the sand on the outside of the pit. Also, sand had filtered down into the cracks around the pit, like in the corners, along joints, and been fused there as well.
The damn thing would now hold water if we wanted. We had a natural glass-lined fire pit now. We decided to try out some racked & stacked chickens first before we slowly made our way pig-ward.
We staked split chickens out on various levels in the pit. We had worked up a series of adjustable metal frames where we could lay the staked-out poultry. The racks popped right in place and after a couple of hours, hey presto bar-be-qued peri-peri chicken. And hot-butter roasted chicken. And for the uninitiated, roast chicken with smoked Hungarian paprika and Indian ghee. A real Iron Chef fusion-style mixture.
Liam and I took his Grady White out on the Persian Gulf and managed a couple of dorados, or Mahi, a largish shark, and a couple of kingfish off the deeper shipping banks. Fileted up and tacked in place, we played around with the smoking woods. Mango was just weird. Fig was weirder, almost vinegary; but not terrible. Pomegranate/tangerine tree smoked Mahi, seasoned shark steak, and Kingfish was the hit of the week. So easy, yet so tasty. It went well with Es’ famous Navajo Fry Bread.
We were gaining confidence. Prof. Pinkus’ days were numbered. We decided that the Eid al Fitr would be the time that we’d been preparing our porky pit pig production.
How’s that for cultural sensitivity? Break the Ramadan fast with a pig roast.
We’re all about cultural sensitivity.
Anyways, we hemmed and hawed over the methods of dispatching our soon-to-be-delicious 325 pounds of Professor Pinkus.
One wag suggested we have it OD on tranquilizers, trip him out a la Heath Ledger. Use loads of Nytol®, Dramamine™, oxycodone, hydrocodone, diazepam, temazepam, alprazolam, and doxylamine."
It was straight out of the Fabulous Furry Freak Brothers©.
We all agreed it was funny as hell, but that it probably wouldn’t work.
Then we thought we might go all Halal, just slit the pig’s throat with a very sharp knife, and let it bleed out.
Rejected as to being too thrashing, too noisy, too Arabic, and just plain uncivilized.
I thought I could get hold of a 12 gauge shotgun and some Foster Deer slugs. But again, noisy and messy. Besides, I’d have to borrow a shotgun, and that might raise some eyebrows.
We’ve managed to keep Prof. Pinkus under wraps now for almost 3 months. Hate to blow it right before the feasting was to begin.
In the end, all it took was an 18-pound maul and a solid whack to the right side of the head.
More sensitive viewers might want to skip a dozen or so paragraphs ahead. Just fair warning™.
I was elected to deliver the coup de grâce.
After walloping a bound and gagged Prof. Pinkus upside the head and basically caving in the skull, severing the skull-spinal cord connection at the atlas/axis connection, it was instant lights-out, he felt nothing.
We had already apologized to Prof. Pinkus, and thanked him for his contribution.
Seldom before has lunch ever been so noble.
Prof. Pinkus freezes and collapse, the legs give way, and the neck goes rigid. We picked up the extraordinarily sharp butcher’s knife sitting there, one hand under the chin and pull the head back. The other hand takes the sharp, stout knife under the neck and slices across the neck back to the bone of the vertebrae.
The knife hand loops around to the poll of the head, pushes down and forward while the hand under the chin pulls back and rearwards, so the neck vertebrae connecting tissue cracks. Knife hand back down under the neck, chin hand slides up and a finger hooks into the trachea and slice between the separated vertebrae.
With our previous practice and experience, 10 to 15 seconds from hammer strike to the semi-decapitated head.
Grisly but necessary.
Hanging the beast by its back hocks, well out of sight of any casual interlopers, we bleed the animal out into 5-gallon buckets, saving the precious juice. Vonn and I have visions of homemade blütwurst, blood-n-tongue sausage, and zultze or schwartamaga; lovely, lovely headcheese.
But that’s for later. Vonn gathers the blood in gallon-size freezer zip bags.
Now to scalding the corpse, scraping off the hair and external epidermal debris. We had a tub of boiling water into which Prof. Pinkus went. It was a boring, tedious, annoying repeated dunk-soak-raise-scrape-return until the carcass was clean and smooth and removed of all nasty gunk on the outside.
Now comes the really icky part™, gutting and scraping out the carcass. Before opening the abdominal cavity, it was required to de-bung the animal. Cut around the anus, go in deep but not too, pull the bunghole out, seal with zip ties, and cut and discard. Now the lower GI tract is sealed from leaking when the rest is removed. We also have to remove the male dangly bits in a similar manner as Prof. Pinkus was a boy hog.
Still hanging, we open the hog from sternum to groin, letting gravity aid us in helping Prof. Pinkus literally spill his guts. Right down into a waiting gut-bucket, or galvanized 50-liter steel tub. The chest region is split open further and the lovely and delicious major organs are singly removed by hand. Heart, liver, kidneys, etc., lungs, gall bladder, spleen, pancreas, and a few other organs are discarded.
With that, we open the hog to where it will lay flat on the roasting rack. It is then hosed off and generally cleaned up before we give a good going over.
After it dries, the whole gutted critter is washed in wine. Evidently, it’s a French thing according to Honey Bee.
We wrap the hog in burlap, soak it down in cheap-ass wine and let it sleep 24 hours or so in Liam and Cassandra’s freezer chest.
The next day, the fire is started in the fire pit. We have lump charcoal, bucket after bucket of fruit tree chunks soaking in water and probably half a rick of firewood to keep the party going the next 24-36 hours.
We retrieve Prof. Pinkus from his cool, not frozen state, say hello and proceed to arrange him staked to the cooking frame in a belly-down, butterflied posture. Internally, he was well seasoned with dry rub after the obligatory internal rubdown with Napoleon brandy. We placed 40 garlic bulbs, kosher sea salt, olive oil, black pepper, and liberal amounts of Old Bay, to taste beneath him.
So, it was up to me to get the external goo ready for the pig. Kansas City-Style Sauce? Eastern North Carolina Vinegar Sauce? South Carolina-Style Mustard Sauce? Piedmont or Lexington-Style Dip? South Carolina-Style Mustard Sauce? Texas-Style Mop or Basting Sauce? Alabama White Sauce? Wisconsin Drunken Religious Experience Sauce?
“Ah, the hell with it!”, I venture, “Sauces come much later. Too early; they caramelize, crystallize, and burn. We’ll go for a good rub instead.”
I mean, who doesn’t enjoy a good rub now and again?
Anyways, which fucking rub? Kansas City Rib Rub? Mustard Rub? Spare Rib Rub? Memphis-Style Rib Rub? Porker's Rib Seasoning? Best Odds Rib Rub? Carolina Dry Rub? Texas Dry Rub? Jamaican Jerk Dry Rub? Classic Pork Dry Rub?
Too much choice! Seasoning overload!
I call over everyone involved in this little soiree and instruct them to come up with a rub we can all enjoy. I had to kill and gut the critter, it’s about time I go all Subsurface Manager, and delegate out some parts of this project.
So, over beer, G&T’s, vodka and lime soda and various Froggy wines, ‘my’ crew came up with a rub that was simple, tasty and ironically reflects some of the culinary aspects of the region we’re currently defiling.
• Smoked Hungarian Red paprika
• Brown sugar
• Caster sugar
• Black pepper
• Kosher salt
• Cayenne pepper
• White pepper
• Chili pepper
• Dehydrated garlic
• Dehydrated onion
• Fenugreek
• Red Cardamom
• Turmeric
• Ginger
• Garam masala (Cumin, Coriander, Green and Black Cardamom, Cinnamon, Nutmeg, Cloves, Bay leaves, Peppercorns, Fennel, Mace, and dried Chilies.)
They went to the co-op, bought buckets of the individual spices and played the rest of the day at getting to that one perfect combination for our resting porker.
I don’t remember the exact breakdown of the proportion of the spices, but whatever it was, it tasted brilliant. Now we had about 8 or 9 pounds of the stuff. We were ready to go.
Prof. Pinkus was set on the cooking rack, belly open and down. He was doused internally once again liberally with cheap Indian Napoleon brandy and secured to the rack atop all the garlic, celeriac root, boudin, and small new potatoes.
He was tied in place with heavy organic hemp twine and had his mouth propped open to facilitate circulation of the pit’s heat and convection. He looked very Pink Floydian. One almost expected him to take flight.
The exterior of the porker was treated to a nice rubdown. I swear I saw him smile once or twice when Honey Bee insisted on a sensual massage to make the resultant meat that much more tender. Olive oil infused with lime oil and garlic after a thorough wash with more brandy. Followed by a liberal rubbing of dry rub.
Finally, ready to go, we tented the porker loosely with industrial-strength silver aluminum foil. The frame with its cargo was lowered and locked into place for at least 24 hours. Probably closer to 36, as we’re going ‘low and slow’.
We take turns, between hands of poker, cribbage, and Schafskopf, as well as numerous G&Ts, Yorshs, and vodka and lime drink cocktails, to check on our prized porker. We kept the temperature right at 2050 F as best we could.
The voluminous smoke coming off the barbeque pit was our one concern. It packed an amazing aroma and filtered around the whole compound, dragging in expectant pikers, leeches, and other forms of human ectoparasites.
We told them we were smoking a whole camel, Texas-style, a la filét de hump, and wouldn’t be ready for another couple of days; so piss off. That seemed to get rid of all but the most insistent. We finally got rid of him by using a leaf blower and directing a stream of high-velocity roast-pork laden smoke his direction each time we had to add more fuel to the fire.
Time marched on and the time finally came: the deep internal ham’s temperature hit 180 degrees F.
Prof. Pinkus was ready to make his debut. But first, we needed to get him out of the barbeque pit and over to Vonn’s garage to rest a while.
More futzing, more aluminum foil, and more beers later, Prof. Pinkus, in all his delectable roasted glory was cooling out from atop a pair of sawhorses. Of course, he had to rest after his ordeal, but that didn’t mean we couldn’t manage a few samples.
He was done to a turn. It was incredible. Crispy-crunchy-crackly over lean, moist and insanely flavorful meat. Not bad for a bunch of bumbling international mugs on their first Middle Eastern pig-roast pit-roast endeavor.
Everyone made up their own version of sauce for sandwiches and dipping. We decided that we’d never all agree on one sauce, and 4 or 5 on one porker would be just too damn many.
So, please yourself. Just do it, yourself.
Behind closed doors, Liam and I were once again elected to reduce Prof. Pinkus to primary parts. We were hopefully disguising the fact that here sits 185 pounds of delectable roast pork in a very Muslim country on one of their highest holy days.
So it was a bit unnerving when Sheik Gungan showed up and asked: “What was that wonderful aroma?”
We said smoked beef…lamb…camel…turducken…Tyrannosaur… anything other than what it really was.
He asked for a sample.
What could we do? We couldn’t well refuse now, could we?
We gave him some of the best bits to try.
“Lovely, gents, just lovely. Next time, for reference, more garam masala, and a little more rosemary. I find it really brings out the subtle flavors of pork.” He smiled, wiping his pork-sticky fingers on my HGGTG towel.
“You old fraud”, we all smiled at once.
“What?”, he shied, raising his eyebrows, “It’s for scientific evaluation purposes. It’s therefore allowed. Now, do you have any cold beer, gin-n-tonics, or vodka and lime, which I’m hearing is very nice together, that I might also scientifically sample?” he smiled toothily through his long white beard.
We had made another powerful friend. Although it cost us one smoked Boston Butt, actually off the shoulder, that’s butcher’s for you, and a half a liter of homemade Texas-style barbeque sauce and another of Esme’s homemade fennel and caraway-infused coleslaw.
Everyone on the cul-de-sac now had a freezer full of pit-roasted pork. The Brits got their sausage once Vonn and Liam figured out how to use the Osterizer® Stuffing Horn. That was almost as much fun as doing the pit-barbeque. Never leave to Brits what Baja Canadians can better do.
We distributed the bacon and hams, and the rest divided whatever was left. Which was a lot of pit-roasted pig pieces and parts.
The bones made their way into gaily wrapped gifts and were posted anonymously to Mr. Guano Insano. We hoped he appreciated all our effort.
I used Esme’s great-grandmother’s old German recipe for Headcheese. Basically, boiled smoked pork head meat in aspic jelly. With dill pickles. And pickled eggs. With special spices.
Well, I don’t give a shit. We like it.
Anyways, summer slowly slid south and the temperatures during the day got slightly more tolerable. Liam and I decided to forego his boat for a while, as launching and recollecting required us to put Liam’s boat in the water HERE and recover the boat THERE. It was trucked, via road, from the recovery place to the launch place.
Why? Damnifweknow.
It only cost something like US$5 to ship the boat back to the launch area and they actually did a good job hosing and steam cleaning the boat before parking it back in its rental dry dock. These were still the early days before gas was king in Qutur, so things were still ridiculously cheap. There were exactly 3 high rise hotels back then, as compared to the insane silhouette presented by Duhu’s current evening sun.
I had flown over some likely looking flats that might hold snook, grouper, and tarpon on my last flight back from the rig. I translated that onto whatever road maps we could find here, as most everything was a state secret, ground verification was a must.
Liam and I tossed a couple of surf rods, a cooler full of beer and some bait into the back of his new diesel Mitsobitchy Prago™, and we were off to the north of town, the least developed chunk of Duhu real estate to date.
We drove down a rip-rap road that was more just a pile of random rocks trucked into the bay area and dumped into something that resembled a straight line.
I was less than confident that we weren’t going swimming today, but Liam relished every bounce, bolt and jolt. He confided in me that one of the big reasons he took the job here in the Middle East was that he’d never in a million years be able to afford a truck like this back in bonny Scotland™. He confided that he couldn’t have even afforded the fuel for this diesel-slurper back in the UK, it was that dear.
So, down the path we rebound. I was watching the water on both sides of the narrow groin, and saw it was getting deeper, but very slowly. I looked at my GPS and saw that we’d driven some 3.5 km out to sea at this point.
“Liam”, I said, “That’s a fuck of a long way to reverse.”
“Ah, Rock”, Liam assured me, “ No worries, Doctor. It’s all a loop. We can just drive our way out of any trouble.”
I remained unconvinced.
We came to a breach in the ‘jetty’. There was some heavy marine equipment mounted on barges. They were working a large cut, ostensibly for cargo ships to pass through. There was to be a swing-bridge built after they cleared the channel, but with all these loose rocks, it was putting paid to their scheme.
We parked and wandered over to who appeared to be the head guy.
“G’Day”, “Liam says, “What’ the big fucking holdup? We’ve got fish to catch, mate.”
Liam had previously spent a few years down in Australia as if it didn’t show.
“Oh, hello”, the natty clad black man said, “We’re having a bit of a time with loose rocks here. Supposed to be angular to lock in place, but by the time they get here from the quarry, they’re a sharp as bowling balls.”
I introduced myself and Liam as he was back in the boot snaking a beer. The black feller introduced himself as Zafir Djaballah, a civil engineer late from Algeria.
“So”, I said to Zafir, “If I’ve got this straight, you cut a channel and want to line it with rip rap. But the rocks won’t stay put. How deep are you cutting and what’s the size of the channel?”
“Oh, 35’ east-west, 15’ north-south. About 15 meters deep.” He relates.
“And the road metal? Where’s that from?” I ask.
“Arabia”, he tells us, “They quarry it there and transport it here. It’s costly, but that’s about the only option we have.”
Liam looks to Zafir. “Hey, Zafir?”, Liam asks, “Y’ken who this guy is?” as he points to me.
Zafir shakes his head “I just met Dr. Rock.”
“That’s not all who he is”, Liam smiles widely, “That, my friend, is the Motherfucking Pro from Dover! If he can’t fix your little problem, he can damn sure make it go away…”
Zafir looks to me as if to ask: “What the fuck, sir?”
“Well, Zafir, “ I say, “I’m a bit of a dab hand with explosives. This sounds like a really simple problem. Drill a grid of 2 meter centered holes, and prime them with a waterproof explosive. Detonate together electrically and there you go. Channel dug and already filled with angular limestone blocks. Easy-peasy.”
Zafir looks over the water and puzzles and puzzles.
“But sir’, he says, “Where would I find such explosives and such expertise?”
“Well…for starters”, I said, “You could ask me.”
He leads us over to a company trailer, where Liam and I drank beers, smoked cigars and told the superintendent of our plans. The Egyptian superintendent, Qaaid al-Zahra, later ‘Randy’ (Quaid?…never mind) scrutinized all our identification. He was actually very impressed when he came across my Blaster’s credentials.
“Doctor”, Qaaid said, “I do like your plan. The drilling is no problem, the problem is obtaining the explosives.”
“Look, Qaaid”, I said, “Leave that to me. You’re working for a government company, I’m working for a government company. What difference does it make? How long to drill the grid of holes Liam and I laid out?”
“Oh, probably about a week”, Qaaid said.
“OK, how about this?”, I said, “Liam and I will be back out here unless the weather’s being stupid and we’ll set and prime the charges? After which, we’ll make certain everything’s green and blow this little project for you?”
“If you can, Inshallah.”, Qaaid said.
“Even if we’re out of shallah”, I said back to Randy.
That Sunday, after Liam backed us down the 3.6 km or bouncy un-turn-around-able path he drove us out on, I ordered some Kinepax liquid binaries, as it came in easy-to-use 1-meter threaded lengths in various diameters. Qaaid was drilling 3.5” diameter holes, so the 3.00” nominal OD threaded length would be a breeze. I ordered a couple of spools of shock tube, comb connectors, deflectors, and tie-ins, and a 25 kilo box of ‘Elephant Shit’.
We make sure each hole was blown clean with a high-pressure water hose. Since the water here was only 8 meters deep, we could get by with regular lightweight skin diving gear. I could leave my wetsuit, diver’s helmet and all that heavy-duty ice-diving gear at home for this trip.
Liam and I would pre-form the charges, each exactly 6 meters in length, to match the depth of the drilled holes. Individual 1-meter units just screwed together, pin and box style, it was the utmost in simplicity. Rather like Seismogel™, but packed a considerably higher wallop. All told, we would be setting off some 36 nodal points, each 6 meters deep with 6 meters of binary which weighed 5.3 kg/meter.
Turn the crank and we’d be planting approximately 1,145 kilograms or 2,524 pounds of high-energy binary explosive.
Hmph. A new personal record.
Like Guinness even cared.
So, once we got the high sign from Randy that the shot holes had been drilled and cleaned, the next part of the project was up to us.
We were both PADI-certified. Liam had done some oilfield related diving in the North Sea some years ago. I was a veteran of the Ice Wars from the days of Future Passed back in Baja Canada.
The waters here were calm, gin-clear, and warm.
The dives here weren’t work, this was a paid vacation.
I had liberated a trailer for all our pyrotechnics and Liam was elected to use his Prago as the tow vehicle. We bounded our way out to the Liam’s Pass, as we had dubbed it, with a work trailer containing some 2,750 pounds of high powered, binary explosives bouncing behind. I also had all my explosives paraphernalia there as well: new waterproof galvanometer, which in and of itself, is rather the achievement. Pliers, spare batteries, couple pair of blaster’s tools, the usual.
Lia and I had our dive gear in the back of his Prago.
A couple of single tanks, backpacks, regulators, hoses, and a few belts full of divers weights.
These must have been of Islamic origin as they are specifically prohibited by the Bible. Deuteronomy 25:13, “Thou shalt not have on thy belt divers weights, a great and a small.” And Proverbs 20:23, “Divers weights are an abomination unto the LORD; and a false balance is not good.
Why there should be proscriptions against SCUBA gear in ancient, desert-dwelling, shepherding Iron Age writings is what keeps Biblical Scholars up at night.
Although I agree, a false balance underwater keeps your Swimmer’s Ear from healing up.
At the pass, we park and call over for a half-dozen ‘helpers’. They were nominal employees of the company, but more indentured servants. Today, they were going to earn their water wings. We had a couple of large pneumatic rafts that we’d use to transport he charges to their final water resting site but damned if Liam and I are going to swim laps every time we needed to set a new charge.
So, indoctrination and Explosives For Dummies.
Safety first, second and last.
Who here can swim?
You guys can stay. OK, the rest of you blokes, bugger off.
Here’s the deal, Sparky. There are 36 lengths of Kinestix with primers already set. Those go last, as that’s where I tie in to detonate. The rest of the 1-meter long tubes are identical. Pin on one end, box on the other. Thread them together and use a single ‘O-ring’ between each. Snug them up good and tight, but don’t go too crazy. Those are binary liquids, and I’ll give them a good smack with a hammer before they go into the hole. I really only have to do the last one as once initiated, these liquids can mix in milliseconds, but I’m all for safety and doing things right the first time.
OK, so, one raft will carry the 36 initiators, that is, the last bits to go. The other rafts will carry the 5-meter long strings of connected explosives. Liam and I will be down on bottom and you guys just stay up on surface, dog paddling or treading water, but slowly feeding the lengths of tubing down to us. When you reach an end, pop on one of the other lengths, the one with the primer.
To be continued.
submitted by Rocknocker to Rocknocker [link] [comments]

Call and Put options for Dummies - YouTube Full Explanation - Trading binary options live tutorial ... I'm New to Trading Binary Options, Where Do I Start? - YouTube THE TRUTH ABOUT BINARY OPTIONS - YouTube Options Trading Basics EXPLAINED (For Beginners) - YouTube This is how to trade Binary Options Full Time! - YouTube Options Trading For Beginners 📝💵  Step-by-Step - YouTube Binary Options Trading for Beginners 2020! - YouTube trade binary options for Dummies

Binary options is one of the riskiest markets out there so it's a good idea to deal with local platforms that are registered in your home country. Most platforms require you to make a certain amount of trades before funds are released. Another hint is to not get into the market trying to become rich quickly as this is a recipe for disaster. Stick to Your Trading Budget. As a beginner, you ... 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 ... Binary Options have a poor reputation because of the bad actors occupying the space. Stories of traders unable to withdraw their fair gains, or outright scams, are plentiful. However there is now a solution, a fully decentralized digital options trading platform allowing traders to pocket instantly their gains, with price feeds provided by reputable third parties, without deposit required. Binary Options Trading for Dummies. Posted on June 20, 2017 by admin. Binary Options Trading is an interesting and novel method in financial markets. It has the term binary in it because as a trader, you are left with only two options in binary trading. Though as this may seem like a risky business, it’s predictable and with a certain amount of planning you can achieve a lot through this ... This trading binary options for dummies PDF features the in and outs of BO as well as strategies needed to achieve success in trading binaries. Here are some of the topics you'll discover while reading the book: The single most critical factor to binary options strategy success - ignore it at your own perils. How to prevent falling prey to a dishonest broker. Simple, easy to copy ideas that ... Binary Options for Dummies? Without assets to trade the binary options market would not exist. Imagine a marketplace without a market. This wouldn’t make any sense. However, there are dozens of assets to trade on a daily basis. With binary options, you can trade all of the major currency pairs, stocks, indices, and commodities. The exciting thing is that you are not limited to only one place ... The Dummies Guide to Trading Binary Options. Binary Options can be either a great introduction to trading financial markets due to their simplicity and limited risk they place on capital or an hedging tool for more experienced traders. They’ve grown massively in popularity over the past several years and the binary options market has matured considerably in terms of competition, the quality ...

[index] [1838] [26231] [19385] [25471] [19896] [21432] [12622] [676] [23250] [25853]

Call and Put options for Dummies - YouTube

Trusted spots blog To register a free account on desktop or laptop, click here To register a f... Get one projectoption course for FREE when you open and fund your first tastyworks brokerage account with more than $2,000: Are binary options a good idea? If you're thinking about trading binary options, watch this video first. Check out our FREE training for traders https://bi... All I am able to say is thank you Mike for helping me turn into the prosperous binary options trader I'm today.”With lots of unfavorable reviews about phony or scam trading techniques, it is ... Free practice account: Listen to Gail Mercer the founder of Traders Help Desk, guide y... Charlie introduces options trading and gives a guide on how to make $100 a day by trading stock options. He goes through simulated trades, scanning, and a compl... Please support us at: In finance, an option is a contract which gives the owner the right, but not the obligation, to buy or sell an underlying asset or ... 💰💲FULL BEGINNER? Join My PERSONAL TRAINING!💴💵 BLW Trading Academy: Live Trading Signals HERE!🔙💲💹Join My ... This is how I have traded Binary for the past 3 years. Thank you for watching my videos, hit the subscribe button for more content. Check out our members res...