Login - Powerful Binary Options Broker • CloseOption

./play.it 2.12: API, GUI and video games

./play.it 2.12: API, GUI and video games

./play.it is a free/libre software that builds native packages for several Linux distributions from DRM-free installers for a collection of commercial games. These packages can then be installed using the standard distribution-provided tools (APT, pacman, emerge, etc.).
A more complete description of ./play.it has already been posted in linux_gaming a couple months ago: ./play.it, an easy way to install commercial games on GNU/Linux
It's already been one year since version 2.11 was released, in January 2019. We will only briefly review the changelog of version 2.12 and focus on the different points of ./play.it that kept us busy during all this time, and of which coding was only a small part.

What’s new with 2.12?

Though not the focus of this article, it would be a pity not to present all the added features of this brand new version. ;)
Compared to the usual updates, 2.12 is a major one, especially since for two years, we slowed down the addition of new features. Some patches took dust since the end of 2018 before finally be integrated in this update!
The list of changes for this 2.12 release can be found on our forge. Here is a full copy for convenience:

Development migration

History

As many free/libre projects, ./play.it development started on some random sector of a creaking hard drive, and unsurprisingly, a whole part of its history (everything predating version 1.13.15 released on Mars 30th, 2016) disappeared into the limbs because some unwise operation destroyed the only copy of the repository… Lesson learned, what's not shared don't stay long, and so was born the first public Git repository of the project. The easing of collaborative work was only accidentally achieved by this quest for eternity, but wasn't the original motivation for making the repository publicly available.
Following this decision, ./play.it source code has been hosted successively by many shared forge platforms:

Dedicated forge

As development progressed, ./play.it began to increase its need for resources, dividing its code into several repositories to improve the workflow of the different aspects of the projects, adding continuous integration tests and their constraints, etc. A furious desire to understand the nooks and crannies behind a forge platform was the last deciding factor towards hosting a dedicated forge.
So it happened, we deployed a forge platform on a dedicated server, hugely benefiting from the tremendous work achieved by the GitLab's package Debian Maintainers team. In return, we tried to contribute our findings in improving this software packaging.
That was not expected, but this migration happened just a little time before the announcement “Déframasoftisons Internet !” (French article) about the planned end of Framagit.
This dedicated instance used to be hosted on a VPS rented from Digital Ocean until the second half of July 2020, and since then has been moved to another VPS, rented from Hetzner. The specifications are similar, as well as the service, but thanks to this migration our hosting costs have been cut in half. Keeping in mind that this is paid by a single person, so any little donation helps a lot on this front. ;)
To the surprise of our system administrator, this last migration took only a couple hours with no service interruption reported by our users.

Forge access

This new forge can be found at forge.dotslashplay.it. Registrations are open to the public, but we ask you to not abuse this, the main restriction being that we do not wish to host projects unrelated to ./play.it. Of course exceptions are made for our active contributors, who are allowed to host some personal projects there.
So, if you wish to use this forge to host your own work, you first need to make some significant contributions to ./play.it.

API

The collection of supported games growing endlessly, we have started the development of a public API allowing access to lots of information related to ./play.it.
This API, which is not yet stabilized, is simply an interface to a versioned database containing all the ./play.it scripts, handled archives, games installable through the project. Relations are, of course, handled between those items, enabling its use for requests like : « What packages are required on my system to install Cæsar Ⅲ ? » or « What are the free (as in beer) games handled via DOSBox ? ».
Originally developed as support for the new, in-development, Web site (we'll talk about it later on), this API should facilitate the development of tools around ./play.it. For example, it'll be useful for whomever would like to build a complete video game handling software (downloading, installation, starting, etc.) using ./play.it as one of its building bricks.
For those curious about the technical side, it's an API based on Lumeneffectuant that makes requests on a MariaDB database, all self-hosted on a Debian Sid. Not only is the code of the API versioned on our forge, but also the structure and content of the databases, which will allow those who desired it to install a local version easily.

New website

Based on the aforementioned API, a new website is under development and will replace our current website based on DokuWiki.
Indeed, if the lack of database and the plain text files structure of DokuWiki seemed at first attractive, as ./play.it supported only a handful of games (link in French), this feature became more inconvenient as the library of ./play.it supported games grew.
We shall make an in-depth presentation of this website for the 2.13 release of ./play.it, but a public demo of the development version from our forge is already available.
If you feel like providing an helping hand on this task, some priority tasks have been identified to allow opening a new Web site able to replace the current one. And for those interested in technical details, this web Site was developed in PHP using the framework Laravel. The current in-development version is hosted for now on the same Debian Sid than the API.

GUI

A regular comment that is done about the project is that, if the purpose is to make installing games accessible to everyone without technical skills, having to run scripts in the terminal remains somewhat intimidating. Our answer until now has been that while the project itself doesn't aim to providing a graphical interface (KISS principle "Keep it simple, stupid"), still and always), but that it would be relatively easy to, later on, develop a graphical front-end to it.
Well, it happens that is now reality. Around the time of our latest publication, one of our contributors, using the API we just talked about, developed a small prototype that is usable enough to warrant a little shout out. :-)
In practice, it is some small Python 3 code (an HCI completely in POSIX shell is for a later date :-°), using GTK 3 (and still a VTE terminal to display the commands issued, but the user shouldn't have to input anything in it, except perhaps the root password to install some packages). This allowed to verify that, as we used to say, it would be relatively easy, since a script of less than 500 lines of code (written quickly over a week-end) was enough to do the job !
Of course, this graphical interface project stays independent from the main project, and is maintained in a specific repository. It seems interesting to us to promote it in order to ease the use of ./play.it, but this doesn't prevent any other similar projects to be born, for example using a different language or graphical toolkit (we, globally, don't have any particular affinity towards Python or GTK).
The use of this HCI needs three steps : first, a list of available games is displayed, coming directly from our API. You just need to select in the list (optionally using the search bar) the game you want to install. Then it switches to a second display, which list the required files. If several alternatives are available, the user can select the one he wants to use. All those files must be in the same directory, the address bar on the top enabling to select which one to use (click on the open button on the top opens a filesystem navigation window). Once all those files available (if they can be downloaded, the software will do it automatically), you can move ahead to the third step, which is just watching ./play.it do its job :-) Once done, a simple click on the button on the bottom will run the game (even if, from this step, the game is fully integrated on your system as usual, you no longer need this tool to run it).
To download potentially missing files, the HCI will use, depending on what's available on the system, either wget, curl or aria2c (this last one also handling torrents), of which the output will be displayed in the terminal of the third phase, just before running the scripts. For privilege escalation to install packages, sudo will be used preferentially if available (with the option to use a third-party application for password input, if the corresponding environment variable is set, which is more user-friendly), else su will be used.
Of course, any suggestion for an improvement will be received with pleasure.

New games

Of course, such an announcement would not be complete without a list of the games that got added to our collection since the 2.11 release… So here you go:
If your favourite game is not supported by ./play.it yet, you should ask for it in the dedicated tracker on our forge. The only requirement to be a valid request is that there exists a version of the game that is not burdened by DRM.

What’s next?

Our team being inexhaustible, work on the future 2.13 version has already begun…
A few major objectives of this next version are :
If your desired features aren't on this list, don't hesitate to signal it us, in the comments of this news release. ;)

Links

submitted by vv224 to linux_gaming [link] [comments]

SCCM WDS/PXE troubleshooting

hello All ,i'm going to strenghten my knowledge (or not) on WDS/PXE Feature on SCCM v2006.
History :
Configuration :
DHCP options 66+67 on DHCP Instance, I know Microsoft doesn't recommand that design for subnet/vlan reaching but who know i don't wanna explain to network engineer what i intent to implement ... waster of time , anyway until now work like a charm .
EG :
https://preview.redd.it/do3v84uyl4n51.png?width=498&format=png&auto=webp&s=7de51b7130f7d8aed656f789edacc7b525d7ba6e
Was implemented on release before v1901 about one year ago (can't recall exactly)
Was updated on v2002 : after that ... broken
Was forced to use Norton ghost as last resort for past two weeks (and it was painfull to .. wait) .. thanks for guyz on reddit (for SCCM client rearm :) )

Problem/Issues related (Testing VM machine) where firewall turned off on OS supervisor .. :

Booting on PXE
After That .
Steps
SMSImages
SMSTemp
BootImage
Logs from SMSPXE.log after last attempt , i read someone Cert chain no validated can be culprit , on log seems ok-ish
I recalled first time i've that worked without the pain , this time wont try to find proper boot file .. (:X) .
If anyone faced same problem ? because now i can say "what the fonk seriously" :D.
With the power of fonk , i going to use IP-Helpers .. not sure if will help ..
And finally logs (SMSPXE.log)
InstallBootFilesForImage failed. 0x80004005 SMSPXE 9/14/2020 4:37:15 PM 13052 (0x32FC)
Warning: Failed to copy the needed boot binaries from the boot image D:\RemoteInstall\SMSImages\034000AC\WinPE.034000AC.wim.
The operation completed successfully. (Error: 00000000; Source: Windows) SMSPXE 9/14/2020 4:37:15 PM 13052 (0x32FC)
Failed adding image D:\RemoteInstall\SMSImages\034000AC\WinPE.034000AC.wim. Will Retry..
Unspecified error (Error: 80004005; Source: Windows) SMSPXE 9/14/2020 4:37:15 PM 13052 (0x32FC)
File D:\RemoteInstall\SMSTemp\2020.09.14.16.37.13.01.{84E47845-E5AB-460E-93B5-9B7F08051E40}.boot.bcd deleted. SMSPXE 9/14/2020 4:37:15 PM 13052 (0x32FC)
File D:\RemoteInstall\SMSTemp\2020.09.14.16.37.13.01.{84E47845-E5AB-460E-93B5-9B7F08051E40}.boot.bcd.log deleted. SMSPXE 9/14/2020 4:37:15 PM 13052 (0x32FC)
Found new image 034000AD SMSPXE 9/14/2020 4:37:15 PM 13052 (0x32FC)
Loaded Windows Imaging API DLL (version '10.0.19041.1') from location 'C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\amd64\DISM\wimgapi.dll' SMSPXE 9/14/2020 4:37:15 PM 13052 (0x32FC)
Opening image file D:\RemoteInstall\SMSImages\034000AD\WinPE.034000AD.wim SMSPXE 9/14/2020 4:37:15 PM 13052 (0x32FC)
Found Image file: D:\RemoteInstall\SMSImages\034000AD\WinPE.034000AD.wim
PackageID: 034000AD
ProductName: Microsoft® Windows® Operating System
Architecture: 0
Description: Microsoft Windows PE (x86)
Version:
Creator:
SystemDir: WINDOWS
`SMSPXE 9/14/2020 4:37:15 PM 13052 (0x32FC)` 
Closing image file D:\RemoteInstall\SMSImages\034000AD\WinPE.034000AD.wim SMSPXE 9/14/2020 4:37:15 PM 13052 (0x32FC)
InstallBootFilesForImage failed. 0x80004005 SMSPXE 9/14/2020 4:37:16 PM 13052 (0x32FC)
Warning: Failed to copy the needed boot binaries from the boot image D:\RemoteInstall\SMSImages\034000AD\WinPE.034000AD.wim.
The operation completed successfully. (Error: 00000000; Source: Windows) SMSPXE 9/14/2020 4:37:16 PM 13052 (0x32FC)
Failed adding image D:\RemoteInstall\SMSImages\034000AD\WinPE.034000AD.wim. Will Retry..
Unspecified error (Error: 80004005; Source: Windows) SMSPXE 9/14/2020 4:37:16 PM 13052 (0x32FC)
File D:\RemoteInstall\SMSTemp\2020.09.14.16.37.15.02.{75724072-C04C-4BF2-B834-A47B23D7FDF7}.boot.bcd deleted. SMSPXE 9/14/2020 4:37:16 PM 13052 (0x32FC)
File D:\RemoteInstall\SMSTemp\2020.09.14.16.37.15.02.{75724072-C04C-4BF2-B834-A47B23D7FDF7}.boot.bcd.log deleted. SMSPXE 9/14/2020 4:37:16 PM 13052 (0x32FC)
Begin validation of Certificate [Thumbprint 6EF26DCEC790BA64CFD3519502FA750109D455E1] issued to '335523aa-73c7-4343-9fb3-10dea91b547d' SMSPXE 9/14/2020 4:37:16 PM 13052 (0x32FC)
Completed validation of Certificate [Thumbprint 6EF26DCEC790BA64CFD3519502FA750109D455E1] issued to '335523aa-73c7-4343-9fb3-10dea91b547d' SMSPXE 9/14/2020 4:37:16 PM 13052 (0x32FC)
PXE Provider finished loading. SMSPXE 9/14/2020 4:37:16 PM 13052 (0x32FC)
Error opening file: D:\RemoteInstall\SMSImages\034000AC\WinPE.034000AC.wim. Win32=32 SMSPXE 9/14/2020 4:37:18 PM 5632 (0x1600)
Retrying D:\RemoteInstall\SMSImages\034000AC\WinPE.034000AC.wim SMSPXE 9/14/2020 4:37:18 PM 5632 (0x1600)
Found new image 034000AC SMSPXE 9/14/2020 4:37:21 PM 5632 (0x1600)
Loaded Windows Imaging API DLL (version '10.0.19041.1') from location 'C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\amd64\DISM\wimgapi.dll' SMSPXE 9/14/2020 4:37:21 PM 5632 (0x1600)
Opening image file D:\RemoteInstall\SMSImages\034000AC\WinPE.034000AC.wim SMSPXE 9/14/2020 4:37:21 PM 5632 (0x1600)
Found Image file: D:\RemoteInstall\SMSImages\034000AC\WinPE.034000AC.wim
PackageID: 034000AC
ProductName: Microsoft® Windows® Operating System
Architecture: 9
Description: Microsoft Windows PE (x64)
Version:
Creator:
SystemDir: WINDOWS
`SMSPXE 9/14/2020 4:37:21 PM 5632 (0x1600)` 
Closing image file D:\RemoteInstall\SMSImages\034000AC\WinPE.034000AC.wim SMSPXE 9/14/2020 4:37:21 PM 5632 (0x1600)
Found new image 034000AD SMSPXE 9/14/2020 4:37:23 PM 5632 (0x1600)
Loaded Windows Imaging API DLL (version '10.0.19041.1') from location 'C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\amd64\DISM\wimgapi.dll' SMSPXE 9/14/2020 4:37:23 PM 5632 (0x1600)
Opening image file D:\RemoteInstall\SMSImages\034000AD\WinPE.034000AD.wim SMSPXE 9/14/2020 4:37:23 PM 5632 (0x1600)
Found Image file: D:\RemoteInstall\SMSImages\034000AD\WinPE.034000AD.wim
PackageID: 034000AD
ProductName: Microsoft® Windows® Operating System
Architecture: 0
Description: Microsoft Windows PE (x86)
Version:
Creator:
SystemDir: WINDOWS
`SMSPXE 9/14/2020 4:37:23 PM 5632 (0x1600)` 
Closing image file D:\RemoteInstall\SMSImages\034000AD\WinPE.034000AD.wim SMSPXE 9/14/2020 4:37:23 PM 5632 (0x1600)
Boot image 034000AC has changed since added SMSPXE 9/14/2020 4:37:28 PM 5632 (0x1600)
Loaded Windows Imaging API DLL (version '10.0.19041.1') from location 'C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\amd64\DISM\wimgapi.dll' SMSPXE 9/14/2020 4:37:28 PM 5632 (0x1600)
Opening image file D:\RemoteInstall\SMSImages\034000AC\WinPE.034000AC.wim SMSPXE 9/14/2020 4:37:28 PM 5632 (0x1600)
Found Image file: D:\RemoteInstall\SMSImages\034000AC\WinPE.034000AC.wim
PackageID: 034000AC
ProductName: Microsoft® Windows® Operating System
Architecture: 9
Description: Microsoft Windows PE (x64)
Version:
Creator:
SystemDir: WINDOWS
`SMSPXE 9/14/2020 4:37:28 PM 5632 (0x1600)` 
Closing image file D:\RemoteInstall\SMSImages\034000AC\WinPE.034000AC.wim SMSPXE 9/14/2020 4:37:28 PM 5632 (0x1600)
============> Received from client: SMSPXE 9/14/2020 4:38:55 PM 5156 (0x1424)
Operation: BootRequest (1) Addr type: 1 Addr Len: 6 Hop Count: 0 ID: 0001E240
Sec Since Boot: 65535 Client IP: 172.025.168.158 Your IP: 000.000.000.000 Server IP: 172.025.169.187 Relay Agent IP: 000.000.000.000
Addr: 00:15:5d:01:31:08:
Magic Cookie: 63538263
Options:
Type=93 Client Arch: EFI BC
Type=97 UUID: 00832d0a20cbcfa24c9774be443d9fdf64
Type=53 Msg Type: 3=Request
Type=60 ClassId: PXEClient
Type=55 Param Request List: 3c8081828384858687
Type=250 0c01000d020800010200070e0100ff SMSPXE 9/14/2020 4:38:55 PM 5156 (0x1424)
Prioritizing local MP http://CSFOREFRONT03.netia-ad.local. SMSPXE 9/14/2020 4:38:55 PM 9128 (0x23A8)
Not in SSL. SMSPXE 9/14/2020 4:38:55 PM 9128 (0x23A8)
RequestMPKeyInformation: Send() failed. SMSPXE 9/14/2020 4:38:55 PM 9128 (0x23A8)
Unsuccessful in getting MP key information. 80004005. SMSPXE 9/14/2020 4:38:55 PM 9128 (0x23A8)
PXE::MP_InitializeTransport failed; 0x80004005 SMSPXE 9/14/2020 4:38:55 PM 9128 (0x23A8)
PXE::MP_LookupDevice failed; 0x80070490 SMSPXE 9/14/2020 4:38:55 PM 9128 (0x23A8)
Prioritizing local MP http://CSFOREFRONT03.netia-ad.local. SMSPXE 9/14/2020 4:38:55 PM 9128 (0x23A8)
Not in SSL. SMSPXE 9/14/2020 4:38:55 PM 9128 (0x23A8)
RequestMPKeyInformation: Send() failed. SMSPXE 9/14/2020 4:38:55 PM 9128 (0x23A8)
Unsuccessful in getting MP key information. 80004005. SMSPXE 9/14/2020 4:38:55 PM 9128 (0x23A8)
PXE::MP_InitializeTransport failed; 0x80004005 SMSPXE 9/14/2020 4:38:55 PM 9128 (0x23A8)
PXE::MP_ReportStatus failed; 0x80070490 SMSPXE 9/14/2020 4:38:55 PM 9128 (0x23A8)
PXE Provider failed to process message.
Element not found. (Error: 80070490; Source: Windows) SMSPXE 9/14/2020 4:38:55 PM 9128 (0x23A8)
00:15:5D:01:31:08, 200A2D83-CFCB-4CA2-9774-BE443D9FDF64: Not serviced. SMSPXE 9/14/2020 4:38:55 PM 9128 (0x23A8)
File D:\RemoteInstall\SMSTemp\2020.09.14.16.37.21.03.{922B1EC8-ECAD-42F6-A001-84177BDD5C13}.boot.bcd deleted. SMSPXE 9/14/2020 4:47:16 PM 3120 (0x0C30)
File D:\RemoteInstall\SMSTemp\2020.09.14.16.37.21.03.{922B1EC8-ECAD-42F6-A001-84177BDD5C13}.boot.bcd.log deleted. SMSPXE 9/14/2020 4:47:16 PM 3120 (0x0C30)
============> Received from client: SMSPXE 9/14/2020 4:53:04 PM 5156 (0x1424)
Operation: BootRequest (1) Addr type: 1 Addr Len: 6 Hop Count: 0 ID: 0001E240
Sec Since Boot: 65535 Client IP: 172.025.168.158 Your IP: 000.000.000.000 Server IP: 172.025.169.187 Relay Agent IP: 000.000.000.000
Addr: 00:15:5d:01:31:08:
Magic Cookie: 63538263
Options:
Type=93 Client Arch: EFI BC
Type=97 UUID: 00832d0a20cbcfa24c9774be443d9fdf64
Type=53 Msg Type: 3=Request
Type=60 ClassId: PXEClient
Type=55 Param Request List: 3c8081828384858687
Type=250 0c01000d020800010200070e0100ff SMSPXE 9/14/2020 4:53:04 PM 5156 (0x1424)
Prioritizing local MP http://CSFOREFRONT03.netia-ad.local. SMSPXE 9/14/2020 4:53:04 PM 9128 (0x23A8)
Not in SSL. SMSPXE 9/14/2020 4:53:04 PM 9128 (0x23A8)
RequestMPKeyInformation: Send() failed. SMSPXE 9/14/2020 4:53:04 PM 9128 (0x23A8)
Unsuccessful in getting MP key information. 80004005. SMSPXE 9/14/2020 4:53:04 PM 9128 (0x23A8)
PXE::MP_InitializeTransport failed; 0x80004005 SMSPXE 9/14/2020 4:53:04 PM 9128 (0x23A8)
PXE::MP_LookupDevice failed; 0x80070490 SMSPXE 9/14/2020 4:53:04 PM 9128 (0x23A8)
Prioritizing local MP http://CSFOREFRONT03.netia-ad.local. SMSPXE 9/14/2020 4:53:04 PM 9128 (0x23A8)
Not in SSL. SMSPXE 9/14/2020 4:53:04 PM 9128 (0x23A8)
RequestMPKeyInformation: Send() failed. SMSPXE 9/14/2020 4:53:04 PM 9128 (0x23A8)
Unsuccessful in getting MP key information. 80004005. SMSPXE 9/14/2020 4:53:04 PM 9128 (0x23A8)
PXE::MP_InitializeTransport failed; 0x80004005 SMSPXE 9/14/2020 4:53:04 PM 9128 (0x23A8)
PXE::MP_ReportStatus failed; 0x80070490 SMSPXE 9/14/2020 4:53:04 PM 9128 (0x23A8)
PXE Provider failed to process message.
Element not found. (Error: 80070490; Source: Windows) SMSPXE 9/14/2020 4:53:04 PM 9128 (0x23A8)
00:15:5D:01:31:08, 200A2D83-CFCB-4CA2-9774-BE443D9FDF64: Not serviced. SMSPXE 9/14/2020 4:53:04 PM 9128 (0x23A8)
submitted by OniSen8 to SCCM [link] [comments]

Is there a short-circuit for Option or Result that doesn't abort the function?

In Python et al, I'm used to doing things like this:
for my_record in my_list: if my_record is None: continue //do things with the confirmed-not-none my_record 
In Rust, the equivalent pattern would be
//my_record is Option, the specifics of Something don't matter for my_record in my_list { if my_record.is_none() { continue; } //my_record is confirmed not None, unwrap it and do things with it let my_unwrapped_record = my_record.unwrap(); } 
Now I understand that unwrap() is strongly frowned on, so I don't see this as a viable workflow here. But what's the idiomatic equivalent?
if let Some(my_unwrapped_record) = my_record { } else { continue; } //do things with my_unwrapped_record 
seems awkward.
match my_record { Some(my_unwrapped_record) => { //process my_unwrapped_record } None => { continue; } } 
produces the exact kind of deeply nested structure I'm trying to avoid (this pattern can repeat 3-4 times if I'm calling functions that all return Option or Result).
let my_escaped_record: Something match my_record { Some(my_unwrapped_record) => { my_escaped_record = my_unwrapped_record; } None => { continue; } } //process my_escaped_record 
does unwrap the value safely and helps it escape the scope of the match block, but that seems ugly too. Roughly 10 lines and a helper variable in Rust for a 2-liner in Python.
The ? operator is almost what I want, but it returns from the entire function, and I just want to skip this one record and keep looping/processing.
for my_record in my_list { let my_unwrapped_record = my_record?; //oops, we just skipped all the rest of our processing because one record was None } 
filter_map() also seems like almost, but not quite, what I'm looking for. It can strip out the None values entirely and unwrap the remaining Options before I ever start looping. The place this really falls through is where indexing matters, like in this database processing code, taken from the mysql QueryResult docs:
let mut results: let mut results: QueryResult = connection.exec_iter(MY_QUERY, params! { "value_1" => 1 })?; let mut set_index: i32 = -1; while let Some(result_set) = results.next_set() { //bump the set index early so we stay synced up even if the ResultSet is garbage and we skip it set_index = set_index + 1; //how to handle result_set here? Its type is Result>. I need to find a short-circuit way to strip the Result off and keep processing if the Result is an Err. //each database table's records are returned in a different result_set, so use the set_index to differentiate them. If we use filter_map to strip invalid result_sets, these set indexes get all out of whack and we'll probably panic when we try to actually use the database rows. match set_index { 0 => { } 1 => { } _ => { unreachable!(); } } } 
There's gotta be some way to do this, right?
submitted by crab1122334 to learnrust [link] [comments]

External Stepmania Song Management Tool - Feature Requests Appreciated

Overview:
Way back in 2015 I created a really simple utility to manage my StepMania library that I dubbed StepManiaHelper, which I released on this subreddit to seemingly little interest. Given the simplicity and narrow use-case of the tool though, that was perhaps not surprising.
The original idea of the tool was that I had a song library of over 10k songs, and that caused the game to take a long time to startup. Since many of these songs were ones I'd never play (some were too difficult for me, some were slow and boring, and others were made for keyboards while I play with a dance pad), it seemed kind of silly to have them in my song library slowing down my load time. However, separating out these songs was a task I felt was better automated than done manually.
Recently a user of said tool sent me a request for some additional features, and I thought I'd revisit it to see if I could do better. I've uploaded an in-development screenshot here so that you can get an idea of the current state of things, although the GUI is still very much subject to change as features are added and I have to figure out how to make them all play well together.
Current Workflow:
The current functionality is that you run the program, point it to your StepMania "songs" directory (or a specific song pack directory, or a specific song directory) and hit the "Parse" button in the upper right. This will scan the selected folder for song information and create the grid seen on the right. As this scan is going on, the "Parse/Filter Output" section on the bottom left provides feedback on what it's doing and where it is in the process (for instance "song pack 5 of 100" and "song 3 of 12" [of songs in the song pack]). If the scan is taking too long, you can also cancel it by clicking the "Parse" button a second time (it's text will change to "Cancel" while parsing).
When the scan is complete (or cancelled) a binary file is created in the selected directory which houses all of the information found in the scan. The application will use this in future scans, speeding things up. This allows you to resume scans at a later time, or scan for newly added songs, and not have to do a lengthy re-scan every time you want to use the program.
Once songs have been identified you can define filters for moving songs out of the library using the "Filters" and "Filter Options" on the left, and then hitting the "Apply Filters" button. Again, feedback on the progress will appear in the "Parse/Filter Output" section. Songs that are flagged by the filters will be moved out of the "songs" directory (where StepMania will no longer be able to see them) and into a folder with the name shown in the filter ("_DUPLICATE", "_NONPAD", etc.).
The checkboxes on the right under the filter columns indicate whether the song is located in the filtered folder or the regular songs folder. Checking or unchecking this checkbox will move the folder.
The current filters are:
Features I'm currently investigating/implementing:
The following are the things I currently have plans to work on or at least investigate:
What I want from the community:
If any of you feel that this tool, or something that I could conceivably add to it, might be useful to you, I would love to hear your thoughts on what I could do or change to make it more useful to you. I can't guarantee I'll be able to add everything, and I'm not even sure when I'll be able to release it since I don't have a ton of time to work on it, but any and all feedback is welcome.
submitted by echo404 to Stepmania [link] [comments]

[vstplugin~] v0.4.0 released!

Here's a new release of [vstplugin~] - a Pd external to load VST plugins on Windows, macOS and Linux!
Binaries are available on Deken or can be downloaded here: https://git.iem.at/pd/vstplugin/-/releases
If possible, please report any issues at https://git.iem.at/pd/vstplugin/issues, otherwise leave a comment here: https://forum.pdpatchrepo.info/topic/13013/vstplugin-v0-4-0-released
NOTE: macOS users might consider using my Pd vanilla fork, where the VST GUI doesn't run on the audio thread. You can download binaries here: https://github.com/Spacechild1/pure-data/releases/tag/v0.51.1-eventloop. It is the same as Pd 0.51-1, but it offers the option to run a Cocoa event loop. Maybe this feature will make its way into a future version of Pd vanilla.
---
Here are the major new features:
See the release page for the full change log.
Have fun!
Christof
submitted by spacechild1 to puredata [link] [comments]

Nothing to see here! pls scroll to next post!

debug.cpp TesterHook.cpp entityidxarray.cpp graph.cpp graphnode.cpp modAI_Memory.cpp aAI_CommsInstructions.cpp aAI_EntityInterface.cpp cAI_Action.cpp cAI_AdminManager.cpp cAI_Agent.cpp cAI_CommsModule.cpp cAI_CommsPrefix.cpp cAI_CommsPrep.cpp cAI_EntityGame.cpp cAI_EntityPlayer.cpp cAI_TransitionData.cpp cAI_Variables.cpp modAI_Audio.cpp modAI_Communication.cpp modAI_Identifier.cpp modAI_Interaction.cpp modAI_Interface.cpp modAI_Senses.cpp modAI_Synchronisation.cpp aAI_PerformTask.cpp cAI_ActionManager.cpp cAI_AnimInterface.cpp cAI_LowLevelInterface.cpp cAI_PerformanceManager.cpp cAI_PerformancePhase.cpp cAI_PerformTaskAction.cpp cAI_PerformTaskAnim.cpp cAI_PerformTaskAudio.cpp cAI_SpeechInterface.cpp aAI_Controller.cpp aAI_ControllerCombat.cpp aAI_Coordinator.cpp aAI_EntityIDArray.cpp aAI_Objective.cpp cAI_ControllerBoundary.cpp cAI_ControllerCamp.cpp cAI_ControllerCombatBlind.cpp cAI_ControllerCombatCover.cpp cAI_ControllerCombatMelee.cpp cAI_ControllerCoverSeek.cpp cAI_ControllerFollow.cpp cAI_ControllerFollowThrough.cpp cAI_ControllerGoto.cpp cAI_ControllerGotoGunfire.cpp cAI_ControllerGuard.cpp cAI_ControllerHide.cpp cAI_ControllerIdle.cpp cAI_ControllerOrbit.cpp cAI_ControllerSearch.cpp cAI_ControllerStop.cpp cAI_CoordinateBoundary.cpp cAI_CoordinateGenericAction.cpp cAI_CoordinateGenericCombat.cpp cAI_CoordinateGuard.cpp cAI_CoordinateIdle.cpp cAI_CoordinateInvestigate.cpp cAI_CoordinateKillEnemy.cpp cAI_CoordinateSearch.cpp cAI_Goal.cpp cAI_GoalDefinition.cpp cAI_IdleActions.cpp cAI_ObjectiveBeBuddy.cpp cAI_ObjectiveHuntEnemy.cpp cAI_ObjectiveIdle.cpp cAI_ObjectiveScriptedAction.cpp cAI_Pack.cpp cAI_Subpack.cpp cAI_HearingSense.cpp cAI_SensesData.cpp cAI_SensingPhase.cpp cAI_VisionSense.cpp meleeTraits.cpp traits.cpp acts.cpp atomicActs.cpp combatUtil.cpp coverActs.cpp gunActBase.cpp meleeActs.cpp pedBodyAnimFSM.cpp pedTorsoAnimFSM.cpp compDriver.cpp weaponController.cpp formation.cpp motion.cpp navigation.cpp navPoint.cpp navTactics.cpp pointTracker.cpp squad.cpp pedSpace.cpp gunPerception.cpp itemPerception.cpp meleeCombatPerception.cpp pedRelationshipPerception.cpp selfPerception.cpp Senses.cpp Vision.cpp AnimBlendAssociation.cpp AnimBlendClumpData.cpp AnimBlendHierarchy.cpp AnimBlendNode.cpp AnimBlendSequence.cpp AnimHierarchy.cpp AnimManager.cpp Compressed.cpp EntityAnim.cpp App.cpp GameTime.cpp AmbientTransitionManager.cpp AudioAnim.cpp audiobloodfx.cpp AudioCollision.cpp audiolog.cpp audioman.cpp AudioMisc.cpp AudioScripted.cpp AudioTextMap.cpp CriAdxStream.cpp CriAixStream.cpp CriInterface.cpp dmaudio.cpp music.cpp SampleManagerChannelFunctions.cpp sampman.cpp ScriptedStream.cpp SpeechManager.cpp VolumeFader.cpp AgeSupport.cpp manager.cpp sfx.cpp system_wii.cpp BufferedSoundWii.cpp CRC.cpp SectorReadables.cpp ColAABox.cpp ColArch.cpp ColData.cpp ColFrustum.cpp ColLine.cpp Collision.cpp ColModelLine.cpp ColModelPoint.cpp ColModelSphere.cpp ColModelTri.cpp ColPrim.cpp ColSphere.cpp ColTri.cpp ContactInfo.cpp ColCylinder.cpp ColModelCylinder.cpp console.cpp skel.cpp wiiplatform.cpp CollectableEffect.cpp CreationManager.cpp Entity.cpp EntityManager.cpp OddEntity.cpp TypeData.cpp Character.cpp ped.cpp pedstates.cpp attackdirectiondata.cpp attackdirectionlookup.cpp pedcombatlookups.cpp pedspinecontrol.cpp pushporter.cpp Climb.cpp Crawl.cpp Crouch.cpp Detector.cpp Dive.cpp Jump.cpp JumpPredictor.cpp autoped.cpp Hunter.cpp Leader.cpp PedHead.cpp delayedHunterSpawn.cpp RsvGoreEffectForExecutions.cpp CameraData.cpp collectable.cpp conveyor.cpp door.cpp EntityLight.cpp Lift.cpp mover.cpp ShotEntity.cpp slidedoor.cpp switch.cpp Trigger.cpp Useable.cpp EntitySound.cpp EnvironmentalExecution.cpp Helicopter.cpp ShadowPlane.cpp FileHandler.cpp FileNames.cpp LoadSave.cpp eyelayerinset.cpp Frontend.cpp FrontendMenu.cpp GameInfo.cpp GameInventory.cpp GameMap.cpp randomuvanimator.cpp tvlayerinset.cpp confirmnewgamepage.cpp inventorystatussettings.cpp layeredbackground.cpp layeredpage.cpp pageeffects.cpp randomoverlay.cpp screenanim.cpp screeneffectsmanager.cpp startpage.cpp texanimator.cpp weaponslotcolours.cpp weaponswapper.cpp weaponswappersettings.cpp backgroundPicAnim.cpp bar.cpp confirmingameQuitPage.cpp ContextButtonDisplay.cpp controllerPage.cpp defaultSettingsPage.cpp ExecutionBox.cpp ExecutionFrame.cpp FlexText.cpp GoalFlexText.cpp hud.cpp hudItem.cpp ingameMainPage.cpp InventorySelector.cpp inventoryStatus.cpp item.cpp LevelNameFlexText.cpp LoadProgressScreen.cpp menu.cpp newGameBrightnessPage.cpp page.cpp radar.cpp saveGamesPage.cpp sceneselectionPage.cpp screen.cpp startLanguageSelectionPage.cpp textures.cpp cGEN_String.cpp cGEN_Timer.cpp gGEN_Globals.cpp gGEN_StandardFunctions.cpp modGEN_Housekeeping.cpp modGEN_Memory.cpp stats.cpp aGEN_Array.cpp cGEN_CharArray.cpp cDBG_DebugFile.cpp modDBG_LowLevelDebug.cpp aGEN_Memory.cpp modGEN_MemoryReporting.cpp rwcore.cpp TextUtils.cpp UniCodeUtils.cpp MhGlobalData.cpp MhLoadSave_Wii.cpp MhPeripherals_Wii.cpp Pad_Wii.cpp WiiLoadSave.cpp CheatHandler.cpp InputManager.cpp WiiAccelerometer.cpp WiiGesture.cpp ActionMapping.cpp KeyCode.cpp Inventory.cpp fx.cpp fxEmitter.cpp fxInfo.cpp fxInterp.cpp fxKeyGen.cpp fxList.cpp fxManager.cpp fxPrim.cpp fxSystem.cpp fxUtils.cpp MHtoFXinterface.cpp Maths.cpp Matrix.cpp Quaternion.cpp Vector.cpp MemManager.cpp PoolAllocationManager.cpp PoolAllocator.cpp CutsceneCamera.cpp EntityFadeController.cpp SimpleLinearAllocator.cpp Cylinder.cpp FrisbeeArm.cpp CriAfsPartition.cpp CriDataStream.cpp DataStreamManager.cpp Portal.cpp StreamedLevelSector.cpp StreamedLevelSectorCore.cpp StreamedLevelSectorManager.cpp StreamedAnimation.cpp StreamedAnimationManager.cpp TexturePool.cpp TexturePoolGroup.cpp TexturePoolManager.cpp AiHelpers.cpp EntityAttrReader.cpp EntityAttrWriter.cpp EntityTextureRenderer.cpp EnvironmentID.cpp PathSearch.cpp RsvDebuggingInfoForUseables.cpp RsvTvpChecker.cpp StringHashing.cpp OverlayMgr.cpp RwRGBA_Globals.cpp ScreenStringsOverlay.cpp TextOverlay.cpp Physics.cpp collisionFrame.cpp camglobals.cpp Crosshair.cpp ExecutionTutorial.cpp handicam.cpp ImpactDamageMap.cpp player.cpp playercam.cpp PLayerLimits.cpp playerstates.cpp WiiExecutionMap.cpp WiiQuickTimeMoment.cpp grenade.cpp responder.cpp Atomic.cpp Camera.cpp CharacterDamageManager.cpp CharacterDamageMap.cpp Clump.cpp ClumpDict.cpp clumplist.cpp collisionmaterial.cpp EntityShadow.cpp EntityShadowManager.cpp Frame.cpp Geometry.cpp Light.cpp lights.cpp material.cpp materiallist.cpp scene.cpp sceneData.cpp skin.cpp spline.cpp texdictionary.cpp texture.cpp tvp.cpp utils.cpp uvanimator.cpp World.cpp WorldSector.cpp CutScene.cpp CutScenePlayed.cpp EntityShadowFader.cpp MaterialMapper.cpp lit_environmentmap.cpp lit_singletexture.cpp lit_singletexture_uvanim.cpp lit_texreconfig.cpp unlit_32indtexture.cpp unlit_notexture.cpp unlit_singletexture.cpp entityData.cpp LoadedScript.cpp ScriptCaseFloat.cpp ScriptCaseGame.cpp ScriptCaseGame2.cpp ScriptCaseGame3.cpp ScriptCaseGameRsv.cpp ScriptCaseInternals.cpp ScriptCaseStandard.cpp ScriptCaseStrings.cpp ScriptLoader.cpp ScriptManager.cpp ScriptVM.cpp BreakingGlass.cpp clouds.cpp Decal.cpp dualtexture.cpp fogpatch.cpp FXMode.cpp LightFX.cpp ParticleEffect.cpp ParticleModel.cpp rats.cpp Renderbuffer.cpp rubbish.cpp SFXManager.cpp StreakEffect.cpp TrailEffect.cpp Weather.cpp jitter.cpp lipsync.cpp spotlight.cpp spotlightcone.cpp throwgraphic.cpp OverbrightEffect.cpp VideoScreenEffect.cpp Str.cpp Timer.cpp Shot.cpp Weapon.cpp WeaponManager.cpp colramp.cpp Gu.cpp GuProfiler.cpp main.cpp renderer.cpp rslengine.cpp shadermgr.cpp vectorASM.cpp volatilemem.cpp WiiGeometry.cpp WiiShader.cpp WorldCollision.cpp actor.c control.c displayObject.c dmabuffer.cpp fileCache.c geoPalette.c GQRSetup.c List.c normalTable.c SKNControl.c SKNMath.c string.c texPalette.c Tree.c HomeButtonMenu.cpp display.cpp binkfunctions.cpp binkplayer.cpp wiitextures.c adler32.c infblock.c infcodes.c inffast.c inflate.c inftrees.c infutil.c zutil.c binkwii.c binkread.c wiiax.c wiifile.c binkacd.c radcb.c expand.c popmal.c radmem.c fft.c dct.c bitplane.c ai.c arc.c AX.c AXAlloc.c AXAux.c AXCL.c AXOut.c AXSPB.c AXVPB.c AXProf.c AXComp.c DSPCode.c AXFXReverbHi.c AXFXReverbHiDpl2.c AXFXReverbHiExp.c AXFXReverbHiExpDpl2.c AXFXReverbStd.c AXFXReverbStdExp.c AXFXHooks.c PPCArch.c gki_buffer.c gki_time.c gki_ppc.c hcisu_h2.c uusb_ppc.c bta_dm_cfg.c bta_hh_cfg.c bta_sys_cfg.c bte_hcisu.c bte_init.c bte_logmsg.c bte_main.c btu_task1.c bd.c bta_sys_conn.c bta_sys_main.c ptim.c utl.c bta_dm_act.c bta_dm_api.c bta_dm_main.c bta_dm_pm.c bta_hh_act.c bta_hh_api.c bta_hh_main.c bta_hh_utils.c btm_acl.c btm_dev.c btm_devctl.c btm_discovery.c btm_inq.c btm_main.c btm_pm.c btm_sco.c btm_sec.c btu_hcif.c btu_init.c wbt_ext.c gap_api.c gap_conn.c gap_utils.c hcicmds.c hidd_api.c hidd_conn.c hidd_mgmt.c hidd_pm.c hidh_api.c hidh_conn.c l2c_api.c l2c_csm.c l2c_link.c l2c_main.c l2c_utils.c port_api.c port_rfc.c port_utils.c rfc_l2cap_if.c rfc_mx_fsm.c rfc_port_fsm.c rfc_port_if.c rfc_ts_frames.c rfc_utils.c sdp_api.c sdp_db.c sdp_discovery.c sdp_main.c sdp_server.c sdp_utils.c db.c dsp.c dsp_debug.c dsp_task.c dvdfs.c dvd.c dvdqueue.c dvderror.c dvdidutils.c dvdFatal.c dvd_broadway.c euart.c EXIBios.c EXIUart.c EXICommon.c fs.c GXInit.c GXFifo.c GXAttr.c GXMisc.c GXGeometry.c GXFrameBuf.c GXLight.c GXTexture.c GXBump.c GXTev.c GXPixel.c GXDisplayList.c GXTransform.c GXPerf.c HBMBase.cpp HBMAnmController.cpp HBMFrameController.cpp HBMGUIManager.cpp HBMController.cpp HBMRemoteSpk.cpp db_assert.cpp db_console.cpp db_DbgPrintBase.cpp db_directPrint.cpp db_mapFile.cpp lyt_animation.cpp lyt_arcResourceAccessor.cpp lyt_bounding.cpp lyt_common.cpp lyt_drawInfo.cpp lyt_group.cpp lyt_layout.cpp lyt_material.cpp lyt_pane.cpp lyt_picture.cpp lyt_resourceAccessor.cpp lyt_textBox.cpp lyt_window.cpp math_triangular.cpp snd_AnimSound.cpp snd_AxManager.cpp snd_AxVoice.cpp snd_Bank.cpp snd_BankFile.cpp snd_BasicSound.cpp snd_Channel.cpp snd_DisposeCallbackManager.cpp snd_DvdSoundArchive.cpp snd_EnvGenerator.cpp snd_ExternalSoundPlayer.cpp snd_FrameHeap.cpp snd_InstancePool.cpp snd_Lfo.cpp snd_MemorySoundArchive.cpp snd_MidiSeqPlayer.cpp snd_MidiSeqTrack.cpp snd_MmlParser.cpp snd_MmlSeqTrack.cpp snd_MmlSeqTrackAllocator.cpp snd_NandSoundArchive.cpp snd_PlayerHeap.cpp snd_RemoteSpeaker.cpp snd_RemoteSpeakerManager.cpp snd_SeqFile.cpp snd_SeqPlayer.cpp snd_SeqSound.cpp snd_SeqSoundHandle.cpp snd_SeqTrack.cpp snd_SoundArchive.cpp snd_SoundArchiveFile.cpp snd_SoundArchiveLoader.cpp snd_SoundArchivePlayer.cpp snd_SoundHandle.cpp snd_SoundHeap.cpp snd_SoundPlayer.cpp snd_SoundStartable.cpp snd_SoundSystem.cpp snd_SoundThread.cpp snd_StrmChannel.cpp snd_StrmFile.cpp snd_StrmPlayer.cpp snd_StrmSound.cpp snd_StrmSoundHandle.cpp snd_TaskManager.cpp snd_TaskThread.cpp snd_Util.cpp snd_WaveFile.cpp snd_WavePlayer.cpp snd_WaveSound.cpp snd_WaveSoundHandle.cpp snd_WsdFile.cpp snd_WsdPlayer.cpp snd_WsdTrack.cpp ut_binaryFileFormat.cpp ut_CharStrmReader.cpp ut_CharWriter.cpp ut_DvdFileStream.cpp ut_DvdLockedFileStream.cpp ut_FileStream.cpp ut_Font.cpp ut_IOStream.cpp ut_LinkList.cpp ut_list.cpp ut_ResFont.cpp ut_ResFontBase.cpp ut_TagProcessorBase.cpp ut_TextWriterBase.cpp ipcMain.c ipcclt.c memory.c ipcProfile.c KPAD.c mem_heapCommon.c mem_expHeap.c mem_frameHeap.c mem_unitHeap.c mem_allocator.c mem_list.c mix.c remote.c mtx.c mtxvec.c mtx44.c vec.c psmtx.c nand.c NANDOpenClose.c NANDCore.c NANDCheck.c OS.c OSAlarm.c OSAlloc.c OSArena.c OSAudioSystem.c OSCache.c OSContext.c OSError.c OSExec.c OSFatal.c OSFont.c OSInterrupt.c OSLink.c OSMessage.c OSMemory.c OSMutex.c OSReboot.c OSReset.c OSRtc.c OSSemaphore.c OSSync.c OSThread.c OSTime.c OSUtf.c OSIpc.c OSStateTM.c __start.c OSPlayRecord.c OSStateFlags.c OSNet.c OSNandbootInfo.c __ppc_eabi_init.cpp Pad.c scsystem.c scapi.c scapi_prdinfo.c seq.c SIBios.c SISamplingRate.c syn.c TPL.c usb.c vi.c i2c.c vi3in1.c wenc.c WPAD.c WPADHIDParser.c WPADEncrypt.c WPADMem.c debug_msg.c WUD.c WUDHidHost.c debug_msg.c DebuggerDriver.c exi2.c float.cpp alloc.c ansi_files.c ansi_fp.c arith.c buffer_io.c ctype.c direct_io.c errno.c file_io.c FILE_POS.C locale.c mbstring.c mem.c mem_funcs.c math_api.c misc_io.c printf.c qsort.c rand.c scanf.c signal.c string.c strtold.c strtoul.c wctype.c wstring.c wchar_io.c uart_console_io_gcn.c abort_exit_ppc_eabi.c math_sun.c extras.c e_atan2.c e_exp.c e_fmod.c e_log.c e_log10.c e_pow.c e_rem_pio2.c k_cos.c k_rem_pio2.c k_sin.c k_tan.c s_atan.c s_ceil.c s_copysign.c s_cos.c s_floor.c s_frexp.c s_ldexp.c s_sin.c s_tan.c w_atan2.c w_exp.c w_fmod.c w_log.c w_log10.c w_pow.c e_sqrt.c math_ppc.c w_sqrt.c __mem.c __va_arg.c global_destructor_chain.c NMWException.cp ptmf.c runtime.c __init_cpp_exceptions.cpp Gecko_ExceptionPPC.cp GCN_mem_alloc.c mainloop.c nubevent.c nubinit.c msg.c msgbuf.c serpoll.c usr_put.c dispatch.c msghndlr.c support.c mutex_TRK.c notify.c flush_cache.c mem_TRK.c string_TRK.c __exception.s targimpl.c targsupp.s mpc_7xx_603e.c mslsupp.c dolphin_trk.c main_TRK.c dolphin_trk_glue.c targcont.c target_options.c UDP_Stubs.c main.c CircleBuffer.c MWCriticalSection_gc.cpp HashKeyFunctions.cpp MemMan.cpp Random.cpp RelocatableChunk.cpp fmod_eventi.cpp fmod_eventsystemi.cpp fmod_sounddef.cpp fmod_eventcategoryi.cpp fmod_eventparameteri.cpp fmod_eventprojecti.cpp fmod_eventgroupi.cpp fmod_reverbdef.cpp fmod_channel_revolution.cpp fmod_os_misc.cpp fmod_os_output.cpp fmod_output_revolution.cpp fmod_sample_revolution.cpp fmod_dsp.cpp fmod_dspi.cpp fmod_codec_aiff.cpp fmod_codec_dsp.cpp fmod_codec_fsb.cpp fmod_codec_user.cpp fmod.cpp fmod_async.cpp fmod_channel.cpp fmod_channel_emulated.cpp fmod_channel_real.cpp fmod_channel_realmanual3d.cpp fmod_channel_stream.cpp fmod_channeli.cpp fmod_channelpool.cpp fmod_channelgroup.cpp fmod_channelgroupi.cpp fmod_codec.cpp fmod_debug.cpp fmod_file.cpp fmod_file_disk.cpp fmod_file_memory.cpp fmod_file_null.cpp fmod_file_user.cpp fmod_listener.cpp fmod_memory.cpp fmod_metadata.cpp fmod_output.cpp fmod_output_emulated.cpp fmod_output_polled.cpp fmod_plugin.cpp fmod_pluginfactory.cpp fmod_sound.cpp fmod_sound_sample.cpp fmod_sound_stream.cpp fmod_soundi.cpp fmod_string.cpp fmod_stringw.cpp fmod_system.cpp fmod_systemi.cpp fmod_thread.cpp fmod_time.cpp fmod_globals.cpp fmod_output_nosound.cpp fmod_output_nosound_nrt.cpp fmod_reverbi.cpp fmod_speakerlevels_pool.cpp
submitted by SSor3nt to ManhuntGames [link] [comments]

Issue connecting two services with compose

Hoping somebody may have some ideas as I expected this to work and have done similar with other services. I'm trying to run my dotnet core project and mongodb as container services with docker-compose. Both services have a clean start with no errors. When I call an endpoint that interacts with mongo I get a timeout error. Since I'm using docker-compose I expect that I can reference the mongo service by the compose service name in the connection string.
mongo:27017/api?authSource=api with username api and password password123 as seen in the docker-compose file below. Instead I get this error:
System.TimeoutException : A timeout occured after 30000ms selecting a server using CompositeServerSelector{ Selectors = MongoDB.Driver.MongoClient+AreSessionsSupportedServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 } }. Client view of cluster state is { ClusterId : "1", ConnectionMode : "Automatic", Type : "Unknown", State : "Disconnected", Servers : [{ ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/mongo:27017" }", EndPoint: "Unspecified/mongo:27017", State: "Disconnected", Type: "Unknown", HeartbeatException: "MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server. - System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (00000005, 0xFFFDFFFF): Name or service not known at System.Net.Dns.InternalGetHostByName(String hostName) at System.Net.Dns.ResolveCallback(Object context) --- End of stack trace from previous location where exception was thrown --- at System.Net.Dns.HostResolutionEndHelper(IAsyncResult asyncResult) at System.Net.Dns.EndGetHostAddresses(IAsyncResult asyncResult) at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization) --- End of stack trace from previous location where exception was thrown --- at MongoDB.Driver.Core.Connections.TcpStreamFactory.ResolveEndPointsAsync(EndPoint initial) at MongoDB.Driver.Core.Connections.TcpStreamFactory.CreateStreamAsync(EndPoint endPoint, CancellationToken cancellationToken) at MongoDB.Driver.Core.Connections.BinaryConnection.OpenHelperAsync(CancellationToken cancellationToken) --- End of inner exception stack trace --- at MongoDB.Driver.Core.Connections.BinaryConnection.OpenHelperAsync(CancellationToken cancellationToken) at MongoDB.Driver.Core.Servers.ServerMonitor.HeartbeatAsync(CancellationToken cancellationToken)", LastUpdateTimestamp: "2020-09-03T21:28:59.1614966Z" }] }. Stack Trace: at MongoDB.Driver.Core.Clusters.Cluster.ThrowTimeoutException(IServerSelector selector, ClusterDescription description) at MongoDB.Driver.Core.Clusters.Cluster.WaitForDescriptionChangedHelper.HandleCompletedTask(Task completedTask) at MongoDB.Driver.Core.Clusters.Cluster.WaitForDescriptionChangedAsync(IServerSelector selector, ClusterDescription description, Task descriptionChangedTask, TimeSpan timeout, CancellationToken cancellationToken) at MongoDB.Driver.Core.Clusters.Cluster.SelectServerAsync(IServerSelector selector, CancellationToken cancellationToken) at MongoDB.Driver.MongoClient.AreSessionsSupportedAfterSeverSelctionAsync(CancellationToken cancellationToken) at MongoDB.Driver.MongoClient.AreSessionsSupportedAsync(CancellationToken cancellationToken) at MongoDB.Driver.MongoClient.StartImplicitSessionAsync(CancellationToken cancellationToken) at MongoDB.Driver.MongoCollectionImpl`1.UsingImplicitSessionAsync[TResult](Func`2 funcAsync, CancellationToken cancellationToken) at MongoDB.Driver.MongoCollectionBase`1.DeleteOneAsync(FilterDefinition`1 filter, DeleteOptions options, Func`2 bulkWriteAsync) at Tests.AssetRespositoryTest.DeleteAsset(String assetId) in /app/Tests/Repository/AssetRepositoryTests.cs:line 140 at Tests.AssetRespositoryTest.TestWithTransaction() in /app/Tests/Repository/AssetRepositoryTests.cs:line 75 at System.Threading.Tasks.Task.<>c.b__139_0(Object state)
I've confirmed my connection string has the usepass set to what's in the compose file below. If I exec into my app container I can ping the mongo container by service name, but I can't use the mongo shell to connect with the root or api user instead I get this error from the mongo shell:
``` docker-compose exec app bash mongo --host mongo --port 27017 -u api -p password123 --authenticationDatabase api
2020-09-03T20:28:37.209+0000 E QUERY [js] Error: couldn't connect to server mongo:27017, connection attempt failed: SocketException: Error connecting to mongo:27017 (23.217.138.110:27017) :: caused by :: Connection refused : [email protected]/mongo/shell/mongo.js:344:17 ```
Interestingly I can connect when running the same mongo shell connect command from my host terminal so this seems to be a container issue.
docker-compose.yml
``` version: '2'
networks: # This special network is configured so that the local metadata # service can bind to the specific IP address that ECS uses # in production credentials_network: driver: bridge ipam: config: - subnet: "169.254.170.0/24" gateway: 169.254.170.1
services: # This container vends credentials to your containers ecs-local-endpoints: # The Amazon ECS Local Container Endpoints Docker Image image: amazon/amazon-ecs-local-container-endpoints volumes: # Mount /varun so we can access docker.sock and talk to Docker - /varun:/varun # Mount the shared configuration directory, used by the AWS CLI and AWS SDKs # On Windows, this directory can be found at "%UserProfile%.aws" - ${USERPROFILE}\.aws:/home/.aws/ environment: # define the home folder; credentials will be read from $HOME/.aws HOME: "/home" # You can change which AWS CLI Profile is used AWS_PROFILE: "default" networks: credentials_network: # This special IP address is recognized by the AWS SDKs and AWS CLI ipv4_address: "169.254.170.2"
app: depends_on: - ecs-local-endpoints - mongo networks: credentials_network: ipv4_address: "169.254.170.3" build: context: . dockerfile: 'Dockerfile.compose' environment: ASPNETCORE_ENVIRONMENT: "local" AWS_DEFAULT_REGION: "us-east-1" AWS_CONTAINER_CREDENTIALS_RELATIVE_URI: "/creds" volumes: - './:/app' links: - mongo:mongo ports: - 9999:9999
mongo: image: 'bitnami/mongodb:4.2' restart: 'always' environment: - MONGODB_ROOT_PASSWORD=iamroot - MONGODB_USERNAME=api - MONGODB_PASSWORD=password123 - MONGODB_DATABASE=api ports: - 27017:27017
mongo-express: image: mongo-express restart: always ports: - 8081:8081 environment: ME_CONFIG_MONGODB_ADMINUSERNAME: root ME_CONFIG_MONGODB_ADMINPASSWORD: iamroot depends_on: - mongo - app ```
Dockerfile
``` FROM mcr.microsoft.com/dotnet/core/sdk:3.1-bionic AS build
WORKDIR /vsdbg RUN apt-get update \ && apt-get install -y --no-install-recommends \ unzip \ && rm -rf /valib/apt/lists/* \ && curl -sSL https://aka.ms/getvsdbgsh \ | bash /dev/stdin -v latest -l /vsdbg

Not copying anything since it's being mounted and managed by docker-compose volumes

WORKDIR /app ENV DOTNET_USE_POLLING_FILE_WATCHER 1 EXPOSE 9999
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4 \ && echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list \ && apt-get update \ && apt-get install -y iputils-ping mongodb-org-shell
ENTRYPOINT dotnet watch --project /app/API/src/Foo.Api/Foo.Api.csproj run --urls=http://+:9999 ```
I added an xUnit test project to exec in and run in app, but I get the same time out stack trace error seen above.
submitted by Tak_Locke to docker [link] [comments]

Having trouble deploying to netlify

Is there anyway I could get some help with why this will not deploy and is getting an error? I took out personal info obviously.
6:03:21 PM: Build ready to start 6:03:23 PM: build-image version: ca811f47d4c1cbd1812d1eb6ecb0c977e86d1a1d 6:03:23 PM: build-image tag: v3.3.20 6:03:23 PM: buildbot version: be8ecf2af866e16fa4301cc5c14de2ccbbb21cf4 6:03:23 PM: Fetching cached dependencies 6:03:23 PM: Starting to download cache of 254.8KB 6:03:23 PM: Finished downloading cache in 70.698045ms 6:03:23 PM: Starting to extract cache 6:03:23 PM: Failed to fetch cache, continuing with build 6:03:23 PM: Starting to prepare the repo for build 6:03:24 PM: No cached dependencies found. Cloning fresh repo 6:03:24 PM: git clone github user 6:03:25 PM: Preparing Git Reference refs/heads/master 6:03:26 PM: Different publish path detected, going to use the one specified in the Netlify configuration file: 'public' versus 'public/' in the Netlify UI 6:03:26 PM: Starting build script 6:03:26 PM: Installing dependencies 6:03:26 PM: Python version set to 2.7 6:03:27 PM: v12.18.0 is already installed. 6:03:28 PM: Now using node v12.18.0 (npm v6.14.4) 6:03:28 PM: Started restoring cached build plugins 6:03:28 PM: Finished restoring cached build plugins 6:03:28 PM: Attempting ruby version 2.7.1, read from environment 6:03:29 PM: Using ruby version 2.7.1 6:03:29 PM: Using PHP version 5.6 6:03:30 PM: 5.2 is already installed. 6:03:30 PM: Using Swift version 5.2 6:03:30 PM: Started restoring cached node modules 6:03:30 PM: Finished restoring cached node modules 6:03:30 PM: Installing NPM modules using NPM version 6.14.4 6:04:15 PM: > [email protected] install /opt/build/repo/node_modules/sharp 6:04:15 PM: > (node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy) 6:04:15 PM: info sharp Downloading https://github.com/lovell/sharp-libvips/releases/download/v8.8.1/libvips-8.8.1-linux-x64.tar.gz 6:04:18 PM: > [email protected] install /opt/build/repo/node_modules/node-sass 6:04:18 PM: > node scripts/install.js 6:04:18 PM: Downloading binary from https://github.com/sass/node-sass/releases/download/v4.14.1/linux-x64-72_binding.node 6:04:18 PM: Download complete 6:04:18 PM: Binary saved to /opt/build/repo/node_modules/node-sass/vendolinux-x64-72/binding.node 6:04:19 PM: Caching binary to /opt/buildhome/.npm/node-sass/4.14.1/linux-x64-72_binding.node 6:04:19 PM: > [email protected] postinstall /opt/build/repo/node_modules/@jimp/plugin-circle/node_modules/core-js 6:04:19 PM: > node -e "try{require('./postinstall')}catch(e){}" 6:04:19 PM: > [email protected] postinstall /opt/build/repo/node_modules/@jimp/plugin-fisheye/node_modules/core-js 6:04:19 PM: > node -e "try{require('./postinstall')}catch(e){}" 6:04:19 PM: > [email protected] postinstall /opt/build/repo/node_modules/@jimp/plugin-shadow/node_modules/core-js 6:04:19 PM: > node -e "try{require('./postinstall')}catch(e){}" 6:04:19 PM: > [email protected] postinstall /opt/build/repo/node_modules/@jimp/plugin-threshold/node_modules/core-js 6:04:19 PM: > node -e "try{require('./postinstall')}catch(e){}" 6:04:19 PM: > [email protected] postinstall /opt/build/repo/node_modules/core-js 6:04:19 PM: > node -e "try{require('./postinstall')}catch(e){}" 6:04:19 PM: > [email protected] postinstall /opt/build/repo/node_modules/core-js-pure 6:04:19 PM: > node -e "try{require('./postinstall')}catch(e){}" 6:04:20 PM: > [email protected] postinstall /opt/build/repo/node_modules/potrace/node_modules/core-js 6:04:20 PM: > node -e "try{require('./postinstall')}catch(e){}" 6:04:21 PM: > [email protected] postinstall /opt/build/repo/node_modules/gatsby-recipes/node_modules/gatsby-telemetry 6:04:21 PM: > node src/postinstall.js || true 6:04:21 PM: > [email protected] postinstall /opt/build/repo/node_modules/gatsby-telemetry 6:04:21 PM: > node src/postinstall.js || true 6:04:21 PM: > [email protected] postinstall /opt/build/repo/node_modules/gatsby/node_modules/gatsby-cli/node_modules/gatsby-telemetry 6:04:21 PM: > node src/postinstall.js || true 6:04:21 PM: > [email protected] postinstall /opt/build/repo/node_modules/cwebp-bin 6:04:21 PM: > node lib/install.js 6:04:22 PM: :heavy_check_mark: cwebp pre-build test passed successfully 6:04:22 PM: > [email protected] postinstall /opt/build/repo/node_modules/mozjpeg 6:04:22 PM: > node lib/install.js 6:04:22 PM: :heavy_check_mark: mozjpeg pre-build test passed successfully 6:04:22 PM: > [email protected] postinstall /opt/build/repo/node_modules/pngquant-bin 6:04:22 PM: > node lib/install.js 6:04:23 PM: :heavy_check_mark: pngquant pre-build test passed successfully 6:04:23 PM: > [email protected] postinstall /opt/build/repo/node_modules/gatsby/node_modules/gatsby-cli 6:04:23 PM: > node scripts/postinstall.js 6:04:23 PM: > [email protected] postinstall /opt/build/repo/node_modules/gatsby 6:04:23 PM: > node scripts/postinstall.js 6:04:23 PM: > [email protected] postinstall /opt/build/repo/node_modules/node-sass 6:04:23 PM: > node scripts/build.js 6:04:23 PM: Binary found at /opt/build/repo/node_modules/node-sass/vendolinux-x64-72/binding.node 6:04:23 PM: Testing binary 6:04:23 PM: Binary is fine 6:04:26 PM: npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/watchpack/node_modules/fsevents): 6:04:26 PM: npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"}) 6:04:26 PM: npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents): 6:04:26 PM: npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"}) 6:04:26 PM: npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/chokidanode_modules/fsevents): 6:04:26 PM: npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"}) 6:04:26 PM: added 2415 packages from 1245 contributors and audited 2489 packages in 55.244s 6:04:28 PM: 110 packages are looking for funding 6:04:28 PM: run npm fund for details 6:04:28 PM: found 18 low severity vulnerabilities 6:04:28 PM: run npm audit fix to fix them, or npm audit for details 6:04:28 PM: NPM modules installed 6:04:28 PM: Started restoring cached go cache 6:04:28 PM: Finished restoring cached go cache 6:04:28 PM: go version go1.14.4 linux/amd64 6:04:28 PM: go version go1.14.4 linux/amd64 6:04:28 PM: Installing missing commands 6:04:28 PM: Verify run directory 6:04:29 PM: 6:04:29 PM: ┌─────────────────────────────┐ 6:04:29 PM: │ Netlify Build │ 6:04:29 PM: └─────────────────────────────┘ 6:04:29 PM: 6:04:29 PM: ❯ Version 6:04:29 PM: @netlify/build 3.0.1 6:04:29 PM: 6:04:29 PM: ❯ Flags 6:04:29 PM: deployId: Id 6:04:29 PM: mode: buildbot 6:04:29 PM: 6:04:29 PM: ❯ Current directory 6:04:29 PM: /opt/build/repo 6:04:29 PM: 6:04:29 PM: ❯ Config file 6:04:29 PM: No config file was defined: using default values. 6:04:29 PM: 6:04:29 PM: ❯ Context 6:04:29 PM: production 6:04:29 PM: 6:04:29 PM: ┌───────────────────────────────────┐ 6:04:29 PM: │ 1. Build command from Netlify app │ 6:04:29 PM: └───────────────────────────────────┘ 6:04:29 PM: 6:04:29 PM: $ gatsby build 6:04:30 PM: /opt/build/repo/node_modules/yoga-layout-prebuilt/yoga-layout/build/Release/nbind.js:53 6:04:30 PM: throw ex; 6:04:30 PM: ^ 6:04:30 PM: Error: Cannot find module 'ink' 6:04:30 PM: Require stack: 6:04:30 PM: - /opt/build/repo/node_modules/ink-box/dist.js 6:04:30 PM: - /opt/build/repo/node_modules/gatsby-recipes/dist/cli.js 6:04:30 PM: - /opt/build/repo/node_modules/gatsby-recipes/dist/index.js 6:04:30 PM: - /opt/build/repo/node_modules/gatsby/node_modules/gatsby-cli/lib/recipes.js 6:04:30 PM: - /opt/build/repo/node_modules/gatsby/node_modules/gatsby-cli/lib/create-cli.js 6:04:30 PM: - /opt/build/repo/node_modules/gatsby/node_modules/gatsby-cli/lib/index.js 6:04:30 PM: - /opt/build/repo/node_modules/gatsby/dist/bin/gatsby.js 6:04:30 PM: at Function.Module._resolveFilename (internal/modules/cjs/loader.js:966:15) 6:04:30 PM: at Function.Module._load (internal/modules/cjs/loader.js:842:27) 6:04:30 PM: at Module.require (internal/modules/cjs/loader.js:1026:19) 6:04:30 PM: at require (internal/modules/cjs/helpers.js:72:18) 6:04:30 PM: at Object. (/opt/build/repo/node_modules/ink-box/dist.js:5:12) 6:04:30 PM: at Module._compile (internal/modules/cjs/loader.js:1138:30) 6:04:30 PM: at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10) 6:04:30 PM: at Module.load (internal/modules/cjs/loader.js:986:32) 6:04:30 PM: at Function.Module._load (internal/modules/cjs/loader.js:879:14) 6:04:30 PM: at Module.require (internal/modules/cjs/loader.js:1026:19) { 6:04:30 PM: code: 'MODULE_NOT_FOUND', 6:04:30 PM: requireStack: [ 6:04:30 PM: '/opt/build/repo/node_modules/ink-box/dist.js', 6:04:30 PM: '/opt/build/repo/node_modules/gatsby-recipes/dist/cli.js', 6:04:30 PM: '/opt/build/repo/node_modules/gatsby-recipes/dist/index.js', 6:04:30 PM: '/opt/build/repo/node_modules/gatsby/node_modules/gatsby-cli/lib/recipes.js', 6:04:30 PM: '/opt/build/repo/node_modules/gatsby/node_modules/gatsby-cli/lib/create-cli.js', 6:04:30 PM: '/opt/build/repo/node_modules/gatsby/node_modules/gatsby-cli/lib/index.js', 6:04:30 PM: '/opt/build/repo/node_modules/gatsby/dist/bin/gatsby.js' 6:04:30 PM: ] 6:04:30 PM: } 6:04:30 PM: 6:04:30 PM: ┌─────────────────────────────┐ 6:04:30 PM: │ "build.command" failed │ 6:04:30 PM: └─────────────────────────────┘ 6:04:30 PM: 6:04:30 PM: Error message 6:04:30 PM: Command failed with exit code 7: gatsby build 6:04:30 PM: 6:04:30 PM: Error location 6:04:30 PM: In Build command from Netlify app: 6:04:30 PM: gatsby build 6:04:30 PM: 6:04:30 PM: Resolved config 6:04:30 PM: build: 6:04:30 PM: command: gatsby build 6:04:30 PM: commandOrigin: ui 6:04:30 PM: environment: 6:04:30 PM: - ADSENSE_ID 6:04:30 PM: - GATSBY_BUZZSPROUT_API_KEY 6:04:30 PM: - GATSBY_MAILCHIMP_AUDIENCE_ID 6:04:30 PM: - GATSBY_PODCAST_NUMBER 6:04:30 PM: - GATSBY_PROXY 6:04:30 PM: - NODE_ENV 6:04:30 PM: publish: /opt/build/repo/public 6:04:30 PM: Caching artifacts 6:04:30 PM: Started saving node modules 6:04:30 PM: Finished saving node modules 6:04:30 PM: Started saving build plugins 6:04:30 PM: Finished saving build plugins 6:04:30 PM: Started saving pip cache 6:04:30 PM: Finished saving pip cache 6:04:30 PM: Started saving emacs cask dependencies 6:04:30 PM: Finished saving emacs cask dependencies 6:04:30 PM: Started saving maven dependencies 6:04:31 PM: Finished saving maven dependencies 6:04:31 PM: Started saving boot dependencies 6:04:31 PM: Finished saving boot dependencies 6:04:31 PM: Started saving go dependencies 6:04:31 PM: Finished saving go dependencies 6:04:33 PM: Error running command: Build script returned non-zero exit code: 1 6:04:33 PM: Failing build: Failed to build site 6:04:33 PM: Failed during stage 'building site': Build script returned non-zero exit code: 1 6:04:33 PM: Finished processing build request in 1m10.018686427s
submitted by Blabbers01 to gatsbyjs [link] [comments]

A Week of Experiencing Rust

I grew up as a C developer, and switched to Java a couple decades ago. A few years ago I decided to retool and chose Go instead of Rust. With my other hobbies on hold, I decided to poke around Rust. Here are 13 things I experienced:
  1. "?". This operator is great. It's just the right amount of syntax to say "I can't deal with this, give it to my caller." This is what I want, not Go's "obj, err := doThing(.." with pages of if statements. The syntax makes much more sense than Java's very verbose try/catch/throw exception handling. Make the syntax for error handling easy and I'll handle errors more often. So easy that:
  2. Option<>, Result<>, and ?. I discovered, like a lot of new people new to Rust, that "?" doesn't work on Option<>'s. I 100% understand why, but that doesn't change my desire that it did. That said, there's an issue to improve the compiler error message to direct people to using ok_or_else. Speaking of error messages:
  3. Result>. I still don't know if this is the correct syntax, but it's what the compiler told me to do. I haven't read about "dyn" yet or why it's important.
  4. io::Error. After figuring out Results and ?, io::Error was really confusing; I think it was this type. There's some type somewhere called Error that is a Result<>.
  5. Ok, Err, Some, None. I discovered when navigating into the code of other crates that these make the flow of code quite readable and I enjoy using and reading them. Seeing "Some" says "it's possible for this function to not return the thing I'm looking for". Seeing "Err" says "this function can fail" - it doesn't matter how far away the function signature is, or how buried in generics-scoping-line noise that I don't understand yet it is.
  6. Cross compiling. In Go, to compile an OSX binary on Linux, I set two environment variables: GOOS=darwin GOARCH=amd64 and I'm set. I can do the same for Windows, and a handful of BSDs. The Rust tooling to cross-compile is still not there yet. If I rustup target add foo, then cargo build --target foo, I expect a binary that runs on foo. Right now I get errors about missing helpers (archivelinkers). I know there are reasons, but I don't want reasons, I just want it to work. Even the cross dropin for Cargo seemed to not work in all cases.
  7. Explicit allocation. I read somewhere that Rust forces the developer to be explicit about when it's allocating memory and passing it around. Of course, this is totally foreign to me. While I don't have an RFC-level detail solution to this, I do wish there was some sort of very shorthand syntax to say "it's okay to do whatever you need to make this work". If my_foo.bar().baz().qux() needs a few interim of allocations, then go for it. If you don't know the size of my type, then go ahead and autobox it for me. Maybe after I've been programming in Rust for a few months, I'll change my mind on this.
  8. Matching variants. I'm using CLion, and I love the "autocomplete missing variants" and the compiler errors when I added new variants to enums. It felt like the tooling was making my life easier.
  9. Lifetimes and ownership. Coming from garbage collected languages, I knew this was going to be tough. Two things I wish I found: 1) a code-free set of examples of different ways that lifetimes show up, maybe with diagrams / pictures and how to handle it. 2) Some sort of linter that would tell me if I'm making bad life choices. Right now I'm wrapping things in Arc<>, and cloning them as I need to give out copies. I have no idea the performance impact of doing this, nor reasonably what my alternatives would be. In fact:
  10. Am I Rust Yet? In general, I'd love something that could check for common bad-practice idioms and suggest alternatives. Even if it was just a book of "if you do pattern X, because you want to do Y, here is the impact, and here is Z which has a similar outcome but isn't bad / is more idiomatic". Is my Optional>> "right" / "fast" - no idea, I kept wrapping it in things until my code worked.
  11. Strings. You probably know what I'm going to say. I've avoided putting references in my structs so far (because I'm not ready to tackle lifetimes). Converting between String, &String, &str, (and then I discovered there's also OsString) is a disappointing experience. I know I'm doing the wrong thing, but I'm not yet ready to invest in really understanding what, so instead I'm wrapping/unwrapping with String::from and as_str.
  12. pub(crate) At one point CLion said "hey, this thing you're trying to access is private, can I make it visible for you?" and this is what it did. This syntax is really nice, it's clear what's going on with the scoping. Conversely:
  13. Imports. It's 2020, and while CLion will reformat my imports, it won't remove unused ones, nor does it try to be helpful in bringing in the imports for traits I'm using. It's a bit disappointing and tedious. I feel like it's so close.
It may not sound this way, but my experience overall pretty positive. Rust's management of transitive dependencies is the perfect tradeoff (Go is still figuring itself out, and Java solved this (differently) a decade ago). Cargo being the defacto build tool is nice. I like that --test and --example are actual concepts. Obviously I wish compiling was faster, but I also think one of my dependencies is doing something clever in its build.rs. I'm also swallowing a two megabyte file with RustEmbed which I'm told stresses things out.
submitted by idcmp_ to rust [link] [comments]

Any wildcard modifier (similar to *) that passes along Ctrl, Alt, Shift modifiers?

I would like to, say, let Win+Z perform a left click, with the Ctrl, Shift, Alt modifiers passed along. Therefore Win+Ctrl+Z would perform Ctrl+click, etc.
I tried the * modifier. It only triggers the hotkey with the modifier, but not passing them along with the left click. So I'm currently using a whole chunk of code:
#z::Send {LButton} ^#z::Send ^{LButton} !#z::Send !{LButton} +#z::Send +{LButton} ^!#z::Send ^!{LButton} ^+#z::Send ^+{LButton} !+#z::Send !+{LButton} ^!+#z::Send ^!+{LButton}
This is getting verbose and tedious as I further wire Win+X as right click, and many more. I briefly researched on Google but didn't see exact relevant materials. Is there a cleaner way for my usage? Thanks in advance.
Edit:
Just tried to write a reusable helper like this
```autohotkey ; passModifiers flags: ; 0x1000: pass along Ctrl ; 0x0100: pass along Alt ; 0x0010: pass along Shift ; 0x0001: pass along LWin or RWin passAlongModifiers(keys, passModifiers:=0x1111) { modifiers := "" if (passModifiers & 0x1000) && GetKeyState("Ctrl", "P") { modifiers .= "" } if (passModifiers & 0x0100) && GetKeyState("Alt", "P") { modifiers .= "!" } if (passModifiers & 0x0010) && GetKeyState("Shift", "P") { modifiers .= "+" } if (passModifiers & 0x0001) && (GetKeyState("LWin", "P") || GetKeyState("RWin", "P")) { modifiers .= "#" } Send, % modifiers . keys }
*#z::passAlongModifiers("{LButton}", 0x1110) ```
Used the old-school option flag pattern instead of 4 separate boolean parameters as AHK doesn't support calling myFunc(b:3) when the function signature is like myFunc(a:=1, b:=2) (?) Correct me if wrong. And used 0x instead of 0b because AHK doesn't support binary literals.
Apart from the minor notes, it seems to work as I intended. Any better way still?
submitted by 9xpe5i to AutoHotkey [link] [comments]

Proxmox containers not running after apt upgrade

I recently performed an apt upgrade and my lxc containers stopped working. When starting a container, no error message appears and the web UI responds with "Task OK" but the container doesn't actually start
I tried pct start 100 also, and no error message was displayed, but trying to pct enter 100 returns Error: container '100' not running!
Not entirely sure which package caused it, bu this this is the apt/history.log
# tail /valog/apt/history.log Start-Date: 2020-07-11 10:24:37 Commandline: apt upgrade Install: pve-headers-5.4.44-2-pve:amd64 (5.4.44-2, automatic), proxmox-backup-client:amd64 (0.8.6-1, automatic), pve-kernel-5.4.44-2-pve:amd64 (5.4.44-2, automatic) Upgrade: proxmox-widget-toolkit:amd64 (2.2-8, 2.2-9), pve-kernel-5.4:amd64 (6.2-3, 6.2-4), corosync:amd64 (3.0.3-pve1, 3.0.4-pve1), libavformat58:amd64 (7:4.1.4-1~deb10u1, 7:4.1.6-1~deb10u1), libcmap4:amd64 (3.0.3-pve1, 3.0.4-pve1), libavfilter7:amd64 (7:4.1.4-1~deb10u1, 7:4.1.6-1~deb10u1), libpve-access-control:amd64 (6.1-1, 6.1-2), libpve-storage-perl:amd64 (6.1-8, 6.2-3), libswresample3:amd64 (7:4.1.4-1~deb10u1, 7:4.1.6-1~deb10u1), libquorum5:amd64 (3.0.3-pve1, 3.0.4-pve1), pve-qemu-kvm:amd64 (5.0.0-4, 5.0.0-9), libmagickwand-6.q16-6:amd64 (8:6.9.10.23+dfsg-2.1, 8:6.9.10.23+dfsg-2.1+deb10u1), pve-container:amd64 (3.1-8, 3.1-10), libpostproc55:amd64 (7:4.1.4-1~deb10u1, 7:4.1.6-1~deb10u1), pve-manager:amd64 (6.2-6, 6.2-9), libvotequorum8:amd64 (3.0.3-pve1, 3.0.4-pve1), libpve-guest-common-perl:amd64 (3.0-10, 3.0-11), libavcodec58:amd64 (7:4.1.4-1~deb10u1, 7:4.1.6-1~deb10u1), libpve-common-perl:amd64 (6.1-3, 6.1-5), libavutil56:amd64 (7:4.1.4-1~deb10u1, 7:4.1.6-1~deb10u1), qemu-server:amd64 (6.2-3, 6.2-8), libcfg7:amd64 (3.0.3-pve1, 3.0.4-pve1), libproxmox-backup-qemu0:amd64 (0.1.6-1, 0.6.1-1), libswscale5:amd64 (7:4.1.4-1~deb10u1, 7:4.1.6-1~deb10u1), libknet1:amd64 (1.15-pve1, 1.16-pve1), libmagickcore-6.q16-6:amd64 (8:6.9.10.23+dfsg-2.1, 8:6.9.10.23+dfsg-2.1+deb10u1), pve-headers-5.4:amd64 (6.2-3, 6.2-4), pve-kernel-helper:amd64 (6.2-3, 6.2-4), libpve-http-server-perl:amd64 (3.0-5, 3.0-6), libcpg4:amd64 (3.0.3-pve1, 3.0.4-pve1), libcorosync-common4:amd64 (3.0.3-pve1, 3.0.4-pve1), imagemagick-6-common:amd64 (8:6.9.10.23+dfsg-2.1, 8:6.9.10.23+dfsg-2.1+deb10u1) End-Date: 2020-07-11 10:26:03 
I tried lxc-start with logs instead, and got these messages:
# lxc-start -n 100 -F -l DEBUG -o /tmp/lxc-100.log lxc-start: 100: lsm/apparmor.c: run_apparmor_parser: 892 Failed to run apparmor_parser on "/valib/lxc/100/apparmolxc-100_<-var-lib-lxc>": apparmor_parser: Unable to replace "lxc-100_". Profile doesn't conform to protocol lxc-start: 100: lsm/apparmor.c: apparmor_prepare: 1064 Failed to load generated AppArmor profile lxc-start: 100: start.c: lxc_init: 845 Failed to initialize LSM lxc-start: 100: start.c: __lxc_start: 1903 Failed to initialize container "100" lxc-start: 100: tools/lxc_start.c: main: 308 The container failed to start lxc-start: 100: tools/lxc_start.c: main: 314 Additional information can be obtained by setting the --logfile and --logpriority options # tail /tmp/lxc-100.log lxc-start 100 20200712012140.203 ERROR start - start.c:lxc_init:845 - Failed to initialize LSM lxc-start 100 20200712012140.203 ERROR start - start.c:__lxc_start:1903 - Failed to initialize container "100" lxc-start 100 20200712012140.203 DEBUG conf - conf.c:idmaptool_on_path_and_privileged:2642 - The binary "/usbin/newuidmap" does have the setuid bit set lxc-start 100 20200712012140.203 DEBUG conf - conf.c:idmaptool_on_path_and_privileged:2642 - The binary "/usbin/newgidmap" does have the setuid bit set lxc-start 100 20200712012140.203 DEBUG conf - conf.c:lxc_map_ids:2710 - Functional newuidmap and newgidmap binary found lxc-start 100 20200712012140.208 NOTICE utils - utils.c:lxc_setgroups:1366 - Dropped additional groups lxc-start 100 20200712012140.208 INFO conf - conf.c:run_script_argv:340 - Executing script "/usshare/lxc/hooks/lxc-pve-poststop-hook" for container "100", config section "lxc" lxc-start 100 20200712012140.893 INFO conf - conf.c:run_script_argv:340 - Executing script "/usshare/lxcfs/lxc.reboot.hook" for container "100", config section "lxc" lxc-start 100 20200712012141.395 ERROR lxc_start - tools/lxc_start.c:main:308 - The container failed to start lxc-start 100 20200712012141.395 ERROR lxc_start - tools/lxc_start.c:main:314 - Additional information can be obtained by setting the --logfile and --logpriority options 
Trying to access the apparmor directory shows that it doesn't exist, could the upgrade have deleted the directory?
# ls /valib/lxc/100/apparmor ls: cannot access '/valib/lxc/100/apparmor': No such file or directory # ls -l /valib/lxc/100/ total 8 -rw-r--r-- 1 root root 977 Jul 12 09:21 config drwxr-xr-x 2 root root 4096 Jun 15 2019 rootfs 
My filesystem is ext4, many issues I found regarding upgrade failures involves zfs but I don't use zfs
I'm not familiar enough with apparmor to go any deeper and also not entirely sure how to use tools/lxc_start.c directly with the --logfile/--logpriority options either, not sure what other logs/config files would be helpful in finding the issue, but here are a few more:
# pct config 100 arch: amd64 cores: 2 hostname: apache memory: 512 nameserver: 1.1.1.1 net0: name=eth0,bridge=vmbr0,gw=192.168.0.1,hwaddr=82:B1:0D:3C:47:68,ip=192.168.0.42/16,ip6=dhcp,type=veth onboot: 1 ostype: ubuntu parent: upgrade rootfs: local-lvm:vm-100-disk-0,size=20G startup: order=1,up=30 swap: 1024 unprivileged: 1 # systemctl status [email protected][email protected] - PVE LXC Container: 100 Loaded: loaded (/lib/systemd/system/[email protected]; static; vendor preset: enabled) Active: failed (Result: exit-code) since Sun 2020-07-12 09:27:47 +08; 16min ago Docs: man:lxc-start man:lxc man:pct Process: 30827 ExecStart=/usbin/lxc-start -F -n 100 (code=exited, status=1/FAILURE) Main PID: 30827 (code=exited, status=1/FAILURE) Jul 12 09:27:44 alpha systemd[1]: Started PVE LXC Container: 100. Jul 12 09:27:47 alpha systemd[1]: [email protected]: Main process exited, code=exited, status=1/FAILURE Jul 12 09:27:47 alpha systemd[1]: [email protected]: Failed with result 'exit-code'. # journalctl -xe -- The job identifier is 100128. Jul 12 09:50:16 alpha systemd[1]: Started PVE LXC Container: 100. -- Subject: A start job for unit [email protected] has finished successfully -- Defined-By: systemd -- Support: https://www.debian.org/support -- -- A start job for unit [email protected] has finished successfully. -- -- The job identifier is 100210. Jul 12 09:50:16 alpha kernel: EXT4-fs (dm-13): mounted filesystem with ordered data mode. Opts: (null) Jul 12 09:50:17 alpha audit[1534]: AVC apparmor="STATUS" info="failed to unpack end of profile" error=-71 profile="unconfined" name="lxc-100_" pid=1534 comm="apparmor_parser" name="lxc-100_" offset=151 Jul 12 09:50:17 alpha kernel: audit: type=1400 audit(1594518617.147:54): apparmor="STATUS" info="failed to unpack end of profile" error=-71 profile="unconfined" name="lxc-100_" pid=1534 comm="apparmor_parser" name="lxc-100_" offset=151 Jul 12 09:50:18 alpha systemd[1]: [email protected]: Main process exited, code=exited, status=1/FAILURE -- Subject: Unit process exited -- Defined-By: systemd -- Support: https://www.debian.org/support -- -- An ExecStart= process belonging to unit [email protected] has exited. -- -- The process' exit code is 'exited' and its exit status is 1. Jul 12 09:50:18 alpha systemd[1]: [email protected]: Failed with result 'exit-code'. -- Subject: Unit failed -- Defined-By: systemd -- Support: https://www.debian.org/support -- -- The unit [email protected] has entered the 'failed' state with result 'exit-code'. 
submitted by NoOneLiv3 to Proxmox [link] [comments]

ISC DHCPD 4.3 IPv6 logging

We've been running DHCPD for years and just ran into a problem that has stumped me for weeks. I'm hoping there are some experts here that have overcome this issue before.
We normally log option 82 with our IPv4 clients which includes a text string from a downstream fibre to the home access node. The string is ASCII and looks something similar to: "NODE 1/1/4/1/xyz12345678"
We then log this with client.remote-id. No issues, been doing it for years.
Recently we've been working towards a general customer IPv6 dual-stack roll out. Our access gear provides the identical string as above in option 37. We use v6relay to pick out the correct string. Problem is the string comes encoded as per the RFC. Using binary-to-ascii(16,8,"", v6relay(1, option client.remote-id)) yields nothing. As a matter of fact the entire log line is skipped. I've tried some other binary to ascii options without success. If I extract the value of option 37 from a pcap (nested value 1... because the access gear + cisco router with ip helper both add option 37 values) I can see the value is encoded as hex. If I grab the value and paste it into any hex to ascii converter everything is there.
Am I missing something here with binary-to-ascii, or is this just not doable in the dhcpd config file?
E: autocorrect typo
submitted by LitreAhhCola to sysadmin [link] [comments]

OBLIGATORY FILLER MATERIAL – Breaking Bad, Part 3

Continuing
“Hello and good day, gentlemen”, I say. “I am Doctor Rocknocker. You may and will refer to me as ‘Rock’. OK? None of this ‘Doctor’ or ‘Sir’ guff. We green here?”
There was a buzz of voices but no direct answers.
“OK. Let’s get a few things down right here and now.
(1.) Call me Rock.
(b.) Answer me loudly. I will need to hear you loud and clear. Best get used to that now.
(iii.) “We green?” means “Are we in agreement?” It’s a form of shorthand I use here and in the field.
(⍾.) “You diggin’ me, Beaumont? means you’ve really done gone and pissed me off; you’ve done something untoward. Pray you never hear that phrase, and,
(∞.) I’m the boss. The top dog. The hookin’ bull. The Maharaja here. I possess the first, final and only words you’re going to listen to for the next couple of weeks. What I say, goes. Any problem, please let me know now so we can replace you most quickly.”
A gentle buzz, but no replies.
“Gentlemen. Do we agree?” I ask.
“Yes, Rock.” Was the reply.
OK, there might be some form of a societal prohibition against making loud noises. That’s the first thing that has to go.
“Gentlemen, we will be working in the great outdoors where there are wind, rain, waves, and other environmental nonsense making all sorts of unrequited noise. We need clear and proper lines of communication. I need to hear you clearly and vice-versa. When speaking, you will speak slowly, clearly, and loudly. “
DO WE AGREE!?!” I yell, rather deafeningly.
“YES, ROCK!” came the eventual reply.
“Outstanding”. I ponder.
Continuing…
“Mr. Sanjay is my de facto second in command. If I’m out having a smoke, taking a piss, or having a snort, he’s in charge. Listen to him as if I suddenly lost 150 pounds, shaved my beard, and inexplicably become Indian.” I chuckled.
They seemed to enjoy that. I actually elicited a few chuckles.
“Mr. Sanjay will now distribute to you your locker boxes. You will wait until he hands you yours. Do not get up and mill around the room. We green?” I ask.
“Green! Doctor Rock.” Came the noisy reply.
“Progress. Marvelous.”, I reflect.
“I’ll be right back. Mr. Sanjay, the room is yours.” I note. I might need to cut back on the coffee.
I slope off to the loo and it’s just as horrible as you can imagine an outdoor communal shithouse in sunny India attended by 30,000 Indian gentlemen could be.
Fuck COVID-19. I’m thinking hot and cold running dysentery, dengue, and death here. Ick.
Glad I have a highly functioning immune system.
I retrieve a shiny aluminum Halliburton™ case from Headquarters and ease off to an unused office space to change.
I went from my usual field garb to full PPEs. It was quite a sight.
I’ll be telling you about it in mere moments. Contain the excitement.
I’m walking back to Outbuilding #2 and damned if my get-up didn’t elicit a few gasps, shielded guffaws, and a salute or two. I have to admit, to the uninitiated, I was a sight right out of Area 52, the more secret one, west by northeast of Roswell, New Mexico.
I get back to the outbuilding and enter. Everyone was looking through their locker boxes, chuckling about their good fortune and wondering with Joker-like glee what the hell all these wonderful gizmos were and where did I get them? They all stopped dead in their tracks when I walked in.
Their silence was palpable.
“Gentlemen”, I said, “Here’s how you are going to look at work tomorrow. Revel in its utility, comfort, and extreme fashion sense.” I did a quick spin like I used to on the runway.
At O’Hare when we were doing field geostatic tests. Whatever were you thinking?
Anyways…
I was wearing a pair of size 66-XTall NFPA 70E blaze orange Carhartt Nomex coveralls. I had on a Dax carbon-fiber blaze orange “Coal Scuttle” hardhat with swing-away hearing protection keyed into your personal communications module, and a gold-anodized, pull-down full face shield. The helmet was designed to drain away falling water down over one’s back and not down one’s neck.
I had a pair of ‘wet’ gloves under the snap retainer on my left shoulder, a pair of ‘dry’ gloves on my right. I was wearing an orange CMC Safety 9-point safety and rescue harness, good to well over 1,500 pounds. Over both shoulders, around the crotch, up the front, and around the back, X-style. This popular harness features multiple D-ring attachment points and the patented JackBack removable padding with breathable D-3 cloth, which keeps shoulder straps separated and makes donning and doffing a breeze. It had several catch-points where one could easily and readily attach to the snap carabiners and get bodily dragged out of a nasty situation by rope or chain. The front waist D-ring allows a comfortable, stable sitting position for rappels and the sternum D-ring works well for helicopter or crane-assist hoists. Gear loops offer easy access to equipment, and quick-connect-disconnect shoulder straps and leg loops make the harness quick to don or doff. It could be used for impromptu spelunking on days off.
I had on Size 16 EEE Gear Box 8088 Men's 8 inch Black Leather intrinsically-safe hard-toed lace-up black turned-heel leather work boots with the new self-cleaning, oil-and chemical resistant Vibram soles.
They couldn’t see, but I was also wearing a cotton-Nomex blend wifebeater and boxers as well. Nomex tends to chafe. Best be safe.
I had a powerful Maglite flashlight clipped to my rescue harness, as well as my mini Air Horn; a blaster’s must. I also had a mobile VHF-Commslink™ radio in a pocket on the back of my coveralls on the left shoulder. I had the microphone for it Velcro-ed to my rescue harness within easy reach. Very cop like. Very cool. Very necessary.
I had a traditional Zippo and Bic Butane lighters in my right-hand chest pocket and a brace of cigars, though these were optional, in my left pocket. I carried a bespoke constructed Swiss Army Knife on a lanyard in my right front pocket and had a custom Bears Paw Leatherman hanging on the left of my rescue harness.
Also clipped to the harness was a Silva orienteering compass. There was a selection of NASA write anywhere pens, Sharpies, and oil-writing chalk pencils in my other front pockets. I had an oil industry tally book in my other front pocket.
Why blaze orange? Well, Red Adair already co-opted bright red, and fluorescent green wasn’t available in my size.
So, we’re now ready to plant explosives in West India or go deer hunting in the Northwoods of Baja Canada.
“Questions, Gentlemen?” I asked.
I explained that in their locker boxes were purchase orders, POs, for every bit of kit I was wearing. They were to take these POs to the Company Store and get, well, kitted out in their own sizes and preferences. I wanted to see everyone back here tomorrow at 1300 hours looking as I do now. Well, maybe skip the cigar and be not quite so large.
I sat down on the table in front of the crowd and had Sanjay bring over the demo locker box.
“OK, gents,” I said, “This locker box is yours and is numbered as such. They will be stored here in Outbuilding #2. Each of you will receive a key for this building as it is now your headquarters. We’ll get back to locker boxes in a minute. Anyone need a break for a few minutes?” I asked.
No one dared answer at this magical juncture in the narrative.
“Well, I do”, I said, “Meet back here in twenty minutes. Sanjay?”
The class wandered out and I conversed with Sanjay. We found the maps I had ordered.
They were an aerial view of the breaking yard and it was split into 6 zones, all a different color. There was one master for the wall and 28 copies for the guys. I also had a log-in/log-out board made. Vertically numbered 1 to 28. There were also 7 vertical bars labeled Zone 1 through Zone 6, and one for ‘in dispose’; i.e., in Latrin-e Land. This was so I’d know where my guys were at all times.
There was a hook for each one of these areas to log in, and to let anyone know where a certain person was during the day or night. You’re number 10? And you’re going to be wielding a torch over in Zone 5? Your brass tag goes right there. You’re going to skip over to Zone 3? Get your ass back here and swap it over to where you’re going. There is no excuse for being where you haven’t said you were, short of active accident or dismemberment.
Everyone shuffles back in and I explain the tote board.
“Notice there’s no spot to leave your brass chit if you’ve gone off the reservation?” I asked. “Why do you suppose that is?”
Confused looks all around.
“Because you keep that brass token with you when you’re not on the job. Lose it, lose your job. Sounds harsh, but so is getting your fucking hands blown off. Think of it as an exercise in discipline.”
There was a very little rebuttal.
“When you are on location, your brass token will reflect where you are. You are off-site, put the brass token in your wallet next to your lucky ‘circular impression’.
There were several knowing grins in my cadets.
Wear it around your neck on a chain. Keep it on your keyring. You can wrap it up in ribbons, you can slip it in your sock; I don’t care. Thing is, it is your ticket to this job. Hold on to it, there will be no replacements. We green?”
“Green, Doctor!”
“Outstanding.”
“Now, locker boxes. Gentlemen”, I continued. “These are your personal boxes that will be archived here. They will contain everything that you will need to carry out the job initially and help you with training the next crew that comes through after I leave. Keep them neat and tidy. I like to pull unannounced locker box inspections, gentlemen. Be forewarned.”
The sound of active scribbling is music to my tinny ears.
“Now, as such”, I continue, “Each locker box, at this point, is identical. Please follow along with me as we do inventory: Each gets locker box will contain (as I pull out the item for identification):
• 1- set Purchase Orders (POs) for PPEs
• 1- Galvanometer
• 2- Blaster’s pliers
• 1- Custom Leatherman
• 1- Metal clipboard
• Various Pens, pencils, paper, etc.
• 5- Sharpies
• 1 copy: Blasters Protocols Handbook, 15th Edition
• 1 copy: Blasting and explosives safety training manual by the IEE.
• 1 copy: Theory and practice of blasting, by Hino (A classic)
• 1 copy: Blasters Handbook, 17th Edition
• Various Explosives catalogs
• 1- Custom Swiss Army Knife
• Several Butane lighters
“Are we in agreement, gentlemen?” I ask. “Please check to be certain you have what the manifest states.”
“As long as we’re going over locker boxes, let’s look at our set of PPE purchase orders. Each locker box will contain POs for:
• 1 pair Orange Nomex coveralls, in your size
• 1 Dax carbon-fibre blaze orange hardhat with ear protection, gold face shield
• 1- CMC Safety 9-point extraction harness with carabiners
• 2- pairs Safety Glasses
• 2- pairs of gloves –wet & dry
• 1- pair Gear Box 8088 hard-toed intrinsically safe 8” work boots
• 1- Silva Orienteering Compass
• 3- pairs of cotton WaterWick socks
• 1- CommsLink™ VHF radio with microphone
• 1- Maglight power flashlight
• 1- Rain suit – also Nomex, bibs and outer shell
• 1- Mini Air Horn Power Tootler
• 1- Pair cotton/Nomex blende underwear – anti-chafe, wifebeateboxer: 3 sets.
• 1- 16-ounce container ‘Babies Bottom’ Talcum powder. Nomex chafes.
“Well, that’s a lot of gear; you best become real familiar with it as soon as you can. You are responsible for your PPEs. Lose them and replace them at your own cost. Wear them out? No problem. We will replace them. Get caught on location without your proper PPEs? Alavida. Goodbye. There is no second try. Fuck up once, and you’re gone. I am here for a limited time to try and teach you characters how to blast boats. I am not here to be your wet-nurse or mother. We green?” I ask.
“YES! Green! Rock!”
“Outstanding!”
We spend about an hour going over the various contents of the locker boxes and I answer general questions about blasting and explosives.
“We will use Primacord by the mile and tons of C-4 primarily. I might introduce you to binary explosives if there’s time. We might also get into PETN and RDX. Dynamite for training. But that’s about it.”
“We will use demolition wire and electrically fired blasting caps and boosters. We might have some time to look at set-pull-forget mechanicochemical fuses. But you’ll all learn some basic electrical wiring and how to design a circuit.”
“Tomorrow, given it doesn’t rain and the creek don’t rise.”
“Time, gentlemen!” I said. It’s been a long day and I’m a bit jet-lagged knackered. Besides, I wanted to give that Jacuzzi a spin.
“OK, remember: get your PPEs tomorrow morning at the Company Store. I expect to see each and every one of you here tomorrow, kitted out and ready to go, at 1300 sharp. That’s it. See you tomorrow. Susandhya. [Good evening.]” I said.
Locker boxes are locked and stowed in an orderly fashion. Each and everyone one of my 24 acolytes come to me before he leaves work to thank me personally and shake my hand.
“This might just work out”, I say to no one in particular.
Sanjay and I head back to the Raj for the night. I’m really tired, finally feeling the jet travel hit, and not the least bit hungry.
However, I do ring up the 214 cigar dude and relieve him of a selection of fine smokes. I drop by the bar for a couple of barley-pops before I retire to my capacious room for the night.
“Sanjay”, I say, “I’m knackered. If anyone wants me, head them off until tomorrow. It can wait. I’m going to get some kip and don’t want to be disturbed. No maids, no Majordomo, no butler. I just want to get unconscious for a while.”
“No problem, Rock”, Sanjay assures me, “I’ll tell them you’ve gone bush and haven’t left a forwarding address.”
“Good man”, I say, patting him on the shoulder. Hell, I must be getting old. Shit like teaching a band of newbies and whooping a little ass would have never as much as caused me a short breath. Then again, it’s probably not the years, it’s really the mileage…
After a quick light breakfast come morning, Sanjay and I are back on location. I’m being given a tour of the place by the day-shift foreman, one Mr. Vikramaditya Shrivastava.
“Yikes”, I say to Sanjay, “You characters really go for your 11-syllable names.”
“Call him ‘Vik’, Rock”, Sanjay smiles, “Good thing you’ve never asked about my last name.”
“Probably is”, I snicker back. I’m not getting roped into this little tussle.
Vik speaks fairly passable English, but I’m still glad Sanjay is here. The first order of business is to see the explosives bunker I sent plans for and how that’s coming along. They tell me it’s almost finished and ready to be stocked with what I’ve ordered.
“Outstanding, let’s have a look,” I say.
Into the Citation Golf Cart, we go. None of this plebian walking shit. We’re MIPs, Monstrously Important People.
Plebes walk, we ride.
We drive around the piles of rusty scrap, huge hunks of bulkhead, and disconcertingly quickly through polychromatic puddles of who-knows-what to slide to a stop in front of a large canvas tent.
Think M *A *S *H-type mess tent.
“What’s this?” I ask, “Commissary? First Aid?”
“No, Dr. Rock”, Vik explains, “Here are your explosives.”
My eyes grow large.
“What do you mean?” I ask. What the fuck do you mean? I mean.
“Building of your bunker is taking more time than we expected what with your design imperatives. But your order was filled most expediently. We are storing it here until the bunker is complete.” He smiles in that inimitable Indian manner that is so irritating when they don’t realize the major fuck-up they’ve just committed.
“OK. Simmer down, Rock.” I say to myself. “Sanjay, ask him again what’s in that tent. That bottomless tent that’s just a sheet of tarpaulin held up by metal poles.”
“He says that’s your explosives order, Rock,” Sanjay says. His demeanor went from perky and helpful to terrified as he saw me turn several shades of crimson and begin to emit wisps of steam.
“Sanjay”, I said in calm, calculated terms. “You are telling me there are over 9 tons of high explosives, blasting caps, boosters, demo wire, and ANFO sitting on wet sand in this heat under a sheet of fucking tarpaulin?”
“Yes?” he stammered, with a squeak.
“OK.”, I said. “We need to keep very calm and not go completely apeshit; and I’m telling you, right now, that’s taking Augean-level effort. We have a situation here, Mr. Sanjay. A very, very dangerous and very deadly situation. Let’s above all, remain calm.”
“Right, Rock”, he replies.
I turn to Vik and say in a calm and collected tone, “YOU STUPID MOTHERFUCKER! WHAT HAVE YOU DONE?
“Calm and collected, right, Rock?” Sanjay smirks and Mr. Vik withers under my verbal assault.
“Sorry, I had to get that one out.”, I apologized, “Mr. Vik. You have created a real blockbuster here. Quite literally. I figured, erroneously it seems, that you would not take delivery of over 9 TONS of high explosives before you had a very safe and secure place to store such.”
“It arrived sooner than we thought. We got a good price on it,” he explained.
You did? Fucking great! Holy mothering fuck!
Now I was even more worried. One does not get discounts or bargain-basement deals on quality high explosives.
“Pray, Mr. Vik”, I entreated, “From where did you source these detonic components?”
“From Best Blast and Supply Llc of Hong Kong Enterprises.” He replied, “Bulk discount quantities, quick delivery bonus. Saved crore rupee.”
No. I was wrong, it could get worse.
Not only 9 tons of high explosives, 9 tons of counterfeit, knock-off, and non-regulated manufacturer explosives.
“OK”, I said, “Let’s take stock here. My bunker isn’t finished yet? Correct? So you and the company meatheads ordered 9 tons of knock-off explosives from some shady and cheesy Chinese dealer and you stored them on wet beach sand, in this heat, under a tarp? Have I got all that right?”
“Oh, yes Doctor Rock.”, he smiled.
“Sanjay”, I said in a low, firm tone, “We have a…situation. We need to cordon this area off and build an exclusion zone as far as we can around it. No one, and I mean no one, gets within what, 10 kilometers? of the tent. This thing goes off, it’s going to leave a much larger than that cone of devastation. Then we need to visit with the management of this place and have a few thousand well-chosen four-letter words. Then I can think about what the fuck we’re going to do about this situation. I’m struggling to remain calm so everyone else will, but this is just a wee bit tetchy. Find me some red flags and start planting them around the tent, working our way out. Let’s go. Calmly, collectively, and with purpose.”
We find a source of 2-meter poles with red pennants. Sanjay also finds a few miles of yellow “Danger: Stay The Fuck Away” tape. We gather then and head back to the tent. We start to spiral out from it planting flags and running tape.
We did the best we could, but we were disrupting daily business activities. Good. Let the head idiots in charge know they’ve fucked up and grandly.
Back at headquarters, I’m fuming. I’m damn mad. I’m loud and being all extremely American about all this.
“You fucking idiots! 9 tons of cheap-shit high explosives? From China? Stored on wet sand in this heat? Under a benchod tarp? Why the flying fuck do you think I sent such detailed plans for a storage bunker? Do you assholes even think?” I railed on like this for at least half an hour, going all Gene Wilder in ‘Young Frankenstein’.
“Yes, Doctor”, one Mr. Karam Kanungo, the local boss and company president said, “That is all true and steps will be taken to redress the situation. But that doesn’t address the issue at hand. What do you suggest?”
“I suggest you are all taken out and given hot coffee high colonics to clear out your thinking processes”, I spit, “But that still leaves us with a nine-ton headache out there waiting to bloom into something even more aggravating.”
The entire assembled board agreed.
I calm down a bit and have a think. Fuck your boardroom, I’m having a cigar.
“You need a licensed, certified, master blaster to go and sort that out. Do you happen to have one handy?” I asked, sweeter than clover honey.
“Ah, yes, you are…oh.”, was the collective realization.
“Yeah, I know. It’s me. I’m the only one that can sort this shit out. We can’t even wait until we find someone from the world to assist. We are sitting on a literal time bomb, gentlemen.” I reply.
They all agreed and were relieved I was going to take on the challenge.
What else could I do? That stuff lights off and we’re talking easily hundreds if not thousands of fatalities and countless injuries. Fuck that. Not on my watch.
I tells ya’ what. The fucking Karma Fairy better shower me with gifts and accolades, blowjobs and candy corn after all this.
In a metaphorical sense, of course.
“OK, Mr. Sanjay, you’re with me.” I say, “Now look, Herr Macs”, I address the collective board, “Before I had carte blanche. Now, if I even think we might need something, it appears. We’ll sort out our honoraria and bonuses for this after we get back.”
Everyone present agreed most hastily. Handshakes all around and apologies from the board cemented the issue.
“OK, Sanjay. I need a bus. At least 24-seater. With a driver than knows how, when, and where to stop. OK?” I ask.
“24, Rock?”, Sanjay asks, “You’re not thinking of including the recruits now, are you?”
“Yes I am, Mr. Sanjay.”, I replied sternly, “On the job training. Meet me at outbuilding #2 at 1300 as per plan. Order a bus and arrange the largest forklift that can manage beach sand, about 100 wooden pallets, plastic wrap, and sandbags. Lots and lots of sandbags. Have them stockpiled away from the tent in a muster area. OK. You got all that?”
“Yes, Rock”, he said, “I’ll be there in a couple of hours. It will only take a few phone calls.”
“Marvelous.”
Not even 1000 in the fucking morning and I’m facing life and death decisions once again. I dig an emergency flask out of my field vest. If this doesn’t qualify as an emergency, what the fuck does?
A tot or two later, I change into my PPEs, and light a cigar. I catch a tap-tap to the region of the tent. I need to reconnoiter the area and figure out what sort of dragon I have to slay and the best way of going about slaughtering the sumbitch.
I’m standing alone, about 250 meters from the tent of death.
I’m puzzling and puzzling; but I can’t allow for my puzzler to go sore. Not this early, anyway.
“OK, me ol’ mucker”, I sigh, “It’s me or thee. Pucker up, Buckwheat. Here I come.”
A blast suit like the ones bomb disposal dudes wear wouldn’t help in the least. All it would do is hold the mashed body parts together to make for easier disposal. I’m anywhere within a kilometer or so of this pile of Chinese counterfeit boom-makers and it decides to let go; I’m lunchmeat. That’s it. Alive one second; kerpow, splat, instantaneously zonked into component particles the next. That’s the long and short of it. No ‘thank you’s. No ‘good bye’s. Just existing here one minute and in an alternate dimension the next.
Doesn't that just take the biscuit? Funny old thing, life.
I trod onwards.
For a moment, nothing happened. Then, after a second or so, nothing continued to happen.
I was walking up to the tent, clearing a path for the forklift. No fucking way I’m schlepping nine tons of dodgy explosives out of here, over wet beach sand, by hand and hoof.
Sand. I’m with young Anakin on this one. I hate sand. I hate walking in dry sand, hiking in wet sand. It makes for a wonderful oil reservoir and I love its porosity and permeability at depth. But at the surface, forget it. Yow! Let me tell you about the time I was out in the Rub al-Khali desert. The great Sand Erg. Wind blowing a force 9 gale! Seif dunes 1,000 meters high…
Yeah. I know. I’m stalling.
I’m approaching the tent. Carefully. I pause to light a new cigar. You might think that daft, but it’s really not. None of the stuff inside is heat-sensitive; let me clarify. None of the stuff is going to go off if hit by errant ash or even a sustained flame. But sitting out in the 30C+ heat? OK, that makes it twitchier. Cigars do the opposite for me. Give me something to concentrate upon and it calms me down.
I need calm now. By the bucketful. Where’s a monsoon when you really need one?
OK, I made it. I’m at the tent. Got to hand it to the workers around here, they respect authority and don’t come anywhere near the tent. They also don’t apparently give a shit as there no crowd gathered filming me with their iPhones to post to You Tube© if the tent decides to go all detonic.
Good. I couldn’t yell anything at them they’d understand to clear out anyway.
I open the hole in the side of the tent and pause. I’m hit with a wave of hot air. And the heady redolence of onions, sewer gas, and dog farts.
Sorry, that’s just me. Weird midnight snack last night. Frozen durian. What a treat.
Anyways.
I smell kerosene. Old wood pulp, like musty magazines. And an undercurrent of almonds.
“Oh, treble fuck me,” I say to no one within 100 square kilometers.
Kerosene is sweaty C-4. Old wood pulp is dynamite. Almonds? My old friend, nitroglycerine.
Things, if possible, went from real to super-uber major-league holy-fuck real.
“OK”, I say, as I dig out my phone and begin to snap pictures at a frantic rate.
Luckily, all the ordnance was piled like-with-like. Blasting caps? All over here. C-4, all along this ‘wall’. Dynamite? All over here. Non-explosives? Right over here.
I was mentally running like a squadron of overclocked Crays, wondering what I need to do to sort out this little situation. I’m so deep in thought, someone would need to throw me a rope to get my attention.
Or, just tap me on the shoulder.
Once I returned from low earth orbit, I turn to see a little wisp of an Indian feller, who had to be at least 27 years Methuselah’s senior.
“What? THE? Actual? Fuck? Are? You? DOING? Here?” I screamed.
“A thousand pardons, Sahib.”, the ancient one said, “I saw you working alone. Salim wonders if you need some help? Salim is good helper. Salim will help you good.”
“Yes, Salim. Oh, hello by the way.”, I said, calming a bit, forcing myself to smile so I didn’t kill him on the spot, “I do need your help. I need you to go, very slowly, out of this tent and to where the flags begin. Stand there and allow access to no one. OK. We green?”
Salim smiles broadly revealing both teeth. I slowly usher him out and remind myself to order a few new pairs of boxers before the day is out.
Back to the problem at hand. There are some salvageable items here. But the most the C-4, all the dynamite and every sack of ANFO has to go. And by ‘go’, I mean be disposed of. How?
By blowing it up, how else?
An idea creeps into my skull. I puff and puff while it grows and finally, I’ve a plan of attack.
I close the tent and slowly walk away. I hand Salim 1000 rupees and tell him that no one, I don’t care if it was Mahatma Gandhi reincarnate, goes anywhere near that tent.
“You savvy?” I ask.
“Oh, Sahib! I savvy! Thank you! Salaam! I savvy!” he is beside himself with joy, 13 bucks, and a task.
I look at my watch. It’s just gone noon. Good. I need a sandwich, some fluid replacement, as I’ve probably literally sweated off 5 kilos in the last hour and a half, and some time to jot down my plans.
I catch a tap-tap, geez, these things are everywhere around here. They form an unsanctioned, but necessary, sort of intradepartmental transport system here. I tip a couple of hundred rupees for every trip. They see blaze orange and they have this Pavlovian reaction. I sometimes need to break up fist-fights over which driver arrived first.
“Commissary”, I say, sit down, let the tap-tap, which is really nothing more than a glorified golf cart, adjust to my Western bulk and away we zip.
Salim is waving to me as we depart.
I shudder to think if I hadn’t had a tot or two and was a bit jumpier from the morning’s caffeine. Here's to alcohol: the cause of, and solution to, all of life's problems.
At the commissary, I grab a tall iced, fruit cocktail juice; a slurry of mixed dragon fruit, kiwi, carambola, blood orange, green apple, watermelon, bitter melon, sweet melon, & bailan melon fruity essence. I’m incredibly thirsty and I need some calories, but not in bulk and not from onion bhajis, mutton kabobs, or something claiming to be grilled chicken on a stick.
The last thing I need today is a case of the trots or even sharp gas pains in the next few hours. I add about 5 fingers of Old Fornicator Vodka to the juice and sip it slowly as my biometric rhythms return from the ionosphere and back to more normal levels.
Remember, I’m EtOh-based. I need to control my various fluid levels very carefully.
The blasting muse is upon me. In less than 30 minutes, I have a plan. Both a written out procedure and a map of what needs to be done.
I finish off another tall, icy glass of potato and various fruit juices, venture outside feeling almost like I’ve once again regained the illusion of control of the situation and my life.
I fire up a heater and decide to walk the approximately 1100 meters to outbuilding #2. I’m thinking as I sashay along; figuring this and calculating that.
I round the corner and see Outbuilding #2 and a bus parked next to it.
The bus looks like a refugee from Sgt. Pepper’s Lonely Hearts Club Band. The movie and album.
I go into Outbuilding #2 and see about half the class has arrived, and they are all kitted out in their new, stiff, and scratchy PPEs.
I nod hello to all and see Sanjay over across the room.
“Mr. Sanjay”, I say, “Nice bus. What’s the story?”
“Only one I could find that was a 24 seater, not actively falling apart, and with an English speaking driver. Rock. Mr. Maha, owneoperator.” He replied.
“Mr. Maha”, I said, shaking his hand. “Love the bus. Some sort of passion project?”
Mr. Maha laughs. “I was city bus driver for 39 years. I retire and go nuts. I buy old bus and fix up mechanicals. Runs all like excellently. Looks like dung heap. I begin to paint and never quite knew when to stop.”
“I like it. Adds a sense of surrealism to the day, as if it really needs more.” I reply, “However, I do hope you know how to stop. I mean that sincerely. We have a literal bomb to defuse. Does that bother you?”
“No, Doctor”, he says, “Nothing much bothers me anymore. I know. You are here. You are to make safe. I feel safe that you’re here. Let us go to work.”
“Outstanding”. I say.
I tell him that a fat bonus will be his when this is all over if all goes to plan.
“Unnecessary.”, he replies, “Mr. Sanjay has already paid me.”
“Paid? Perhaps”, I reply, “You are going to get danger money whether you like it or not.”
“I guess I will like it, Doctor.” He smiles.
“Marvelous.”
I look at the clock, it’s 1256. Almost showtime.
1300 on the spot. I pick up the microphone and address the assembled 24.
“Gentlemen”, I say, “Very good. You all look like late October in the United States. Very festive.” as all are kitted out in their respective PPEs.
“We have a little matter to handle. One that has just cropped up and one you’re certainly not ready for, but I have no other choice. Does that bother anyone here?” I ask.
Head shakes and questions arise.
“OK, class”, I say, “For your first training exercise, we’re going to defuse a 9-ton bomb. Let’s go.”
The collective gasp drew my cigar smoke in another direction, right towards them.
“Doctor…Ah, Rock. Really?” one brave soul asked for the crowd.
“Yes”, I said, “seems your company officials got a ‘real deal’ on some dodgy Chinese explosives. They didn’t wait until they finished the storage bunker I had designed, so they simply set the stuff on the beach and covered it with a canvas tent.”
There were more gasps.
“Indeed”, I said, “We need to neutralize this threat. Sanjay is passing out copies of my plan and designs on just how to do this. Read them over and let me know what you think. You have 5 minutes. We’re out of here at 1330 on the nose.”
They read quickly, cogitated over the plans and as I had assumed, didn’t find any flaws within.
“OK”, I say after an inch of cigar had passed, “You follow my directions, directly and without question, there’s no reason you can’t come out of this alive and happy, free to pursue a life of religious fulfillment.”
There was a chuckle or two at that last line. ‘Airplane’ is such a classic movie.
“Now I know”, I continued, “That this is pretty scary shit. Especially for you guys, being tossed in the deep end like this. I know because I’m scared to death.”
“Oh, Doctor Rock”, one of my acolytes said, “We do not believe this is so.”
“I stay alive by being scared to death”, I replied. “You will learn this as well.”
Sanjay checks out everyone’s PPE and all appear in good order. They are happy to have such nice, new equipment.
And that’s a problem. People used to ragged and ratty shit with which to work will go to extraordinary lengths to not filthy-up brand new working gear. This is one little bugaboo I’m going to settle here and now.
“One thing, gentlemen”, I note, “You all have nice, clean, and new PPEs. You look great. You come back to Outbuilding #2 looking as pristine, you’re gone. Keeping clean is not a part of your training. You’re going to sweat and stink. You keep to clean and it tells me you’re goldbricking, that is, not doing your job.” I say as I surreptitiously unscrew the top of my travel mug, ‘accidentally’ trip and shower the front row with Greenland coffee, lukewarm.
“See?”, I saw, “They were totally protected. That’s what PPEs are all about. We green?”
“Somewhat brown, Rock”, a couple of the guys in the front row reply without a hint of irony.
“Outstanding.”
“Gentlemen, it is time. Take what you think you’ll need and leave the rest in your locker box. Brass tags to Sector 4. On the bus, we leave in 5 minutes.”
I move my brass marker to Zone 4, puff a blue cloud for all to see, and head out to the bus.
We’re loaded and headed to Sector 4 in less than 5 minutes.
“OK”, I say”, I’m going to break you up into groups of 4. Tags number 1 to 4, you’re group 1. 5-8, group 2, and so on. OK?”
All respond in the affirmative.
OK. Six groups of four, Sanjay and me to lead the pack. We roll up to just outside the exclusion zone. With a squeal of brakes, we grind to a halt.
“Outside”, I command, “Assemble in your groups next to the bus. Go!”.
Like a well-oiled team, they de-bus and stand together in 6 groups. Sanjay and I walk along, inspecting the troops.
“OK”, I say, “This may seem like a shit job, but group 4. Back on the bus. To the commissary. Water, juice, and whatever else you think we’ll need to stay hydrated out there. Don’t worry, we’re going on rotation once you get back. You’ll all get a chance to do the exciting stuff. Now, move it.”
I say something to Sanjay, he jots it down in his book, certain to remind me later.
“OK, let’s see. Group 1. Storage detail. Build the temporary in-ground storage locker like it’s shown in the plan. Get help and have them source the manpower and materials. It needs to be done in the next 2 hours. Go!”
There are some explosives that can be salvaged. I need a place to store them. I’ve scouted and laid out a spot away from prying eyes where they can build an 8x8x8 hole in the ground, line it with marine plywood, and store whatever we can salvage. A plywood roof over the thing, a couple of locks, and well, Robert’s your Mother’s Sister’s Husband.
Next, I send group 3 to build a road from the tent to an area on the beach sourced as Disposal Area #1. They will take flags and tape and run a road, of sorts, from the tent to the beach; cordoning it off so we can take the forklift and its loads of dodgy high explosives to the disposal area.
The other groups are doing needful and necessary things as well. I tell Sanjay to keep a lid on things, I’m going to bring the forklift, a few pallets, sandbags and such in for the first run.
I find the forklift, and it’s a huge old Hyster 52-ton truck.
It’ll do.
The keys are in, so I drop in and fire it up. It catches on the first twirl and I pick up a half-dozen wooden pallets, a bunch of sandbags, and a few huge rolls of plastic wrapping. It’s like driving a tank, but it has plenty of power and just a low gear range.
I drive it back to Sector 4 and almost rum over Salim. He was taking my previous orders very seriously, indeed.
“All cool, Salim”, I say over the roar of the forklift, “It’s just me.”
He waves and lets me pass. He’s serious as a heart attack about keeping people out.
I drive and realize that I can’t drive ‘gingerly’ in a conveyance such as this. I can drive deliberately and with forethought, but it rumbles and shudders the ground. Best to slide in, drop the load, and shut her down while I figure out what’s next.
I do so and drop the pallets, etc., just outside the flap of the tent. I back off a few feet, drop the forks, and shut the noisy machine down for the time being.
Sanjay appears. As does Crew #5. I motion them to come over, slowly and with forethought.
We’re all standing outside the tent flap. I raise an index finger, right, of course, to get their attention.
“Gentlemen, first lesson. What says these explosives have gone bad? Answer:” and I open the tent flap.
“Take a whiff. What do you smell?” I instruct.
“Old paper?” was one answer.
“Oil? Petrol? Something petrochemical?” was the next.
“Almonds?” Sanjay says.
“Highest marks. We’ve old C-4. It sweats and smells like kerosene. Old paper or pulp? Dynamite gone wet and bad. Almonds? Bitter, bitter almonds? Nitroglycerine. Yes, guys. We’ve got rogue nitro inside. Anyone want to quit? Now’s your chance.” I ask, being deadly serious.
One looks to another; then they all look to me…eyes wide…
To be continued…
submitted by Rocknocker to Rocknocker [link] [comments]

handlr - a better xdg-utils CLI

https://github.com/chmln/handlr
Manage your default applications with ease using handlr!
submitted by chmln_ to linux [link] [comments]

How do i get vc4 to work on my raspberry pi 3 with archarm?

Most of the info i can google is really old and i suspect things has changed since then, but even though it's old info i've tried it, with no luck. i've also installed the raspios (debian) https://www.raspberrypi.org/downloads/raspberry-pi-os/ and yes it works there when i configure it with raspi-config, i've tried with the arch port thats availible in the aur but also with out luck.
got any advice? i hope im just a blind and its something obvious and thats the reason i cant find any info online.
Here is a little more info
Installed packages:
mesa mesa-demos xf86-video-fbturbo-git xorg-server xorg-xinit 

$ cat /etc/X11/xorg.conf.d/99-fbturbo.conf # This is a minimal sample config file, which can be copied to #/etc/X11/xorg.conf in order to make the Xorg server pick up #and load xf86-video-fbturbo driver installed in the system. #When troubleshooting, check /valog/Xorg.0.log for the debugging #output and error messages. #Run "man fbturbo" to get additional information about the extra #configuration options for tuning the driver. Section "Device" Identifier "Allwinner A10/A13 FBDEV" Driver "fbturbo" Option "fbdev" "/dev/fb0" Option "SwapbuffersWait" "true" EndSection 

$ cat /boot/config.txt enable_uart=1 max_framebuffers=2 gpu_mem=64 dtoverlay=vc4-kms-v3d #Tried settings gpu_mem=64 gpu_mem_64 gpu_mem_256=112 gpu_mem_512=368 cma_lwm=16 cma_hwm=64 cma_offline_start=16 

$ lsmod Module Size Used by 8021q 36864 0 garp 24576 1 8021q mrp 24576 1 8021q stp 20480 1 garp llc 20480 2 stp,garp ccm 20480 2 mt76x0u 20480 0 mt76x0_common 53248 1 mt76x0u mt76x02_usb 24576 1 mt76x0u mt76_usb 40960 2 mt76x02_usb,mt76x0u mt76x02_lib 86016 3 mt76x02_usb,mt76x0_common,mt76x0u mt76 81920 5 mt76_usb,mt76x02_lib,mt76x02_usb,mt76x0_common,mt76x0u mac80211 1048576 6 mt76,mt76_usb,mt76x02_lib,mt76x02_usb,mt76x0_common,mt76x0u brcmfmac 344064 0 brcmutil 20480 1 brcmfmac libarc4 16384 1 mac80211 joydev 32768 0 vc4 200704 0 hci_uart 159744 0 cfg80211 868352 5 mt76,mt76x02_lib,brcmfmac,mac80211,mt76x02_usb cec 77824 1 vc4 btqca 20480 1 hci_uart btbcm 24576 1 hci_uart rc_core 65536 1 cec btintel 32768 1 hci_uart smsc95xx 45056 0 bcm2835_v4l2 69632 0 drm_kms_helper 258048 1 vc4 usbnet 57344 1 smsc95xx syscopyarea 16384 1 drm_kms_helper bluetooth 684032 5 btqca,btintel,hci_uart,btbcm videobuf2_vmalloc 20480 1 bcm2835_v4l2 sysfillrect 16384 1 drm_kms_helper mii 20480 2 smsc95xx,usbnet videobuf2_memops 20480 1 videobuf2_vmalloc sysimgblt 16384 1 drm_kms_helper videobuf2_v4l2 36864 1 bcm2835_v4l2 fb_sys_fops 16384 1 drm_kms_helper videobuf2_common 61440 2 videobuf2_v4l2,bcm2835_v4l2 ecdh_generic 16384 1 bluetooth videodev 274432 3 videobuf2_v4l2,bcm2835_v4l2,videobuf2_common ecc 32768 1 ecdh_generic rfkill 40960 4 bluetooth,cfg80211 raspberrypi_hwmon 16384 0 mc 69632 3 videodev,videobuf2_v4l2,videobuf2_common snd_bcm2835 32768 0 pwm_bcm2835 16384 0 bcm2835_thermal 16384 0 i2c_bcm2835 20480 0 bcm2835_wdt 20480 0 drm 651264 2 drm_kms_helper,vc4 

$ glxinfo | grep rendering direct rendering: Yes 

$ glxinfo | grep OpenGL OpenGL vendor string: VMware, Inc. OpenGL renderer string: llvmpipe (LLVM 10.0.0, 128 bits) OpenGL core profile version string: 3.3 (Core Profile) Mesa 20.1.2 OpenGL core profile shading language version string: 3.30 OpenGL core profile context flags: (none) OpenGL core profile profile mask: core profile OpenGL core profile extensions: OpenGL version string: 3.1 Mesa 20.1.2 OpenGL shading language version string: 1.40 OpenGL context flags: (none) OpenGL extensions: OpenGL ES profile version string: OpenGL ES 3.1 Mesa 20.1.2 OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.10 OpenGL ES profile extensions: 

$ glxgears -info GL_RENDERER = llvmpipe (LLVM 10.0.0, 128 bits) GL_VERSION = 3.1 Mesa 20.1.2 GL_VENDOR = VMware, Inc. GL_EXTENSIONS = GL_ARB_multisample GL_EXT_abgr GL_EXT_bgra GL_EXT_blend_color GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_copy_texture GL_EXT_subtexture GL_EXT_texture_object GL_EXT_vertex_array GL_EXT_compiled_vertex_array GL_EXT_texture GL_EXT_texture3D GL_IBM_rasterpos_clip GL_ARB_point_parameters GL_EXT_draw_range_elements GL_EXT_packed_pixels GL_EXT_point_parameters GL_EXT_rescale_normal GL_EXT_separate_specular_color GL_EXT_texture_edge_clamp GL_SGIS_generate_mipmap GL_SGIS_texture_border_clamp GL_SGIS_texture_edge_clamp GL_SGIS_texture_lod GL_ARB_framebuffer_sRGB GL_ARB_multitexture GL_EXT_framebuffer_sRGB GL_IBM_multimode_draw_arrays GL_IBM_texture_mirrored_repeat GL_ARB_texture_cube_map GL_ARB_texture_env_add GL_ARB_transpose_matrix GL_EXT_blend_func_separate GL_EXT_fog_coord GL_EXT_multi_draw_arrays GL_EXT_secondary_color GL_EXT_texture_env_add GL_EXT_texture_lod_bias GL_INGR_blend_func_separate GL_NV_blend_square GL_NV_light_max_exponent GL_NV_texgen_reflection GL_NV_texture_env_combine4 GL_S3_s3tc GL_SUN_multi_draw_arrays GL_ARB_texture_border_clamp GL_ARB_texture_compression GL_EXT_framebuffer_object GL_EXT_texture_compression_s3tc GL_EXT_texture_env_combine GL_EXT_texture_env_dot3 GL_MESA_window_pos GL_NV_packed_depth_stencil GL_NV_texture_rectangle GL_ARB_depth_texture GL_ARB_occlusion_query GL_ARB_shadow GL_ARB_texture_env_combine GL_ARB_texture_env_crossbar GL_ARB_texture_env_dot3 GL_ARB_texture_mirrored_repeat GL_ARB_window_pos GL_ATI_fragment_shader GL_EXT_stencil_two_side GL_EXT_texture_cube_map GL_NV_depth_clamp GL_NV_fog_distance GL_APPLE_packed_pixels GL_ARB_draw_buffers GL_ARB_fragment_program GL_ARB_fragment_shader GL_ARB_shader_objects GL_ARB_vertex_program GL_ARB_vertex_shader GL_ATI_draw_buffers GL_ATI_texture_env_combine3 GL_ATI_texture_float GL_EXT_shadow_funcs GL_EXT_stencil_wrap GL_MESA_pack_invert GL_MESA_ycbcr_texture GL_NV_primitive_restart GL_ARB_depth_clamp GL_ARB_fragment_program_shadow GL_ARB_half_float_pixel GL_ARB_occlusion_query2 GL_ARB_point_sprite GL_ARB_shading_language_100 GL_ARB_sync GL_ARB_texture_non_power_of_two GL_ARB_vertex_buffer_object GL_ATI_blend_equation_separate GL_EXT_blend_equation_separate GL_OES_read_format GL_ARB_color_buffer_float GL_ARB_pixel_buffer_object GL_ARB_texture_compression_rgtc GL_ARB_texture_float GL_ARB_texture_rectangle GL_ATI_texture_compression_3dc GL_EXT_packed_float GL_EXT_pixel_buffer_object GL_EXT_texture_compression_dxt1 GL_EXT_texture_compression_rgtc GL_EXT_texture_mirror_clamp GL_EXT_texture_rectangle GL_EXT_texture_sRGB GL_EXT_texture_shared_exponent GL_ARB_framebuffer_object GL_EXT_framebuffer_blit GL_EXT_framebuffer_multisample GL_EXT_packed_depth_stencil GL_ARB_vertex_array_object GL_ATI_separate_stencil GL_ATI_texture_mirror_once GL_EXT_draw_buffers2 GL_EXT_draw_instanced GL_EXT_gpu_program_parameters GL_EXT_gpu_shader4 GL_EXT_texture_array GL_EXT_texture_compression_latc GL_EXT_texture_integer GL_EXT_texture_sRGB_decode GL_EXT_timer_query GL_OES_EGL_image GL_EXT_texture_buffer_object GL_AMD_texture_texture4 GL_ARB_copy_buffer GL_ARB_depth_buffer_float GL_ARB_draw_instanced GL_ARB_half_float_vertex GL_ARB_instanced_arrays GL_ARB_map_buffer_range GL_ARB_texture_buffer_object GL_ARB_texture_rg GL_ARB_texture_swizzle GL_ARB_vertex_array_bgra GL_EXT_texture_swizzle GL_EXT_vertex_array_bgra GL_NV_conditional_render GL_AMD_conservative_depth GL_AMD_draw_buffers_blend GL_AMD_seamless_cubemap_per_texture GL_AMD_shader_stencil_export GL_ARB_ES2_compatibility GL_ARB_blend_func_extended GL_ARB_compatibility GL_ARB_debug_output GL_ARB_draw_buffers_blend GL_ARB_draw_elements_base_vertex GL_ARB_explicit_attrib_location GL_ARB_fragment_coord_conventions GL_ARB_provoking_vertex GL_ARB_sampler_objects GL_ARB_seamless_cube_map GL_ARB_shader_stencil_export GL_ARB_shader_texture_lod GL_ARB_texture_buffer_object_rgb32 GL_ARB_texture_cube_map_array GL_ARB_texture_gather GL_ARB_texture_multisample GL_ARB_texture_query_lod GL_ARB_texture_rgb10_a2ui GL_ARB_uniform_buffer_object GL_ARB_vertex_type_2_10_10_10_rev GL_EXT_provoking_vertex GL_EXT_texture_snorm GL_MESA_texture_signed_rgba GL_NV_copy_image GL_ARB_draw_indirect GL_ARB_get_program_binary GL_ARB_robustness GL_ARB_separate_shader_objects GL_ARB_shader_bit_encoding GL_ARB_shader_subroutine GL_ARB_texture_compression_bptc GL_ARB_timer_query GL_ARB_transform_feedback2 GL_ARB_transform_feedback3 GL_ARB_viewport_array GL_EXT_direct_state_access GL_AMD_multi_draw_indirect GL_ANGLE_texture_compression_dxt3 GL_ANGLE_texture_compression_dxt5 GL_ARB_base_instance GL_ARB_compressed_texture_pixel_storage GL_ARB_conservative_depth GL_ARB_internalformat_query GL_ARB_map_buffer_alignment GL_ARB_shader_atomic_counters GL_ARB_shader_image_load_store GL_ARB_shading_language_420pack GL_ARB_shading_language_packing GL_ARB_texture_storage GL_ARB_transform_feedback_instanced GL_EXT_framebuffer_multisample_blit_scaled GL_EXT_transform_feedback GL_AMD_query_buffer_object GL_AMD_shader_trinary_minmax GL_ARB_ES3_compatibility GL_ARB_arrays_of_arrays GL_ARB_clear_buffer_object GL_ARB_compute_shader GL_ARB_copy_image GL_ARB_explicit_uniform_location GL_ARB_fragment_layer_viewport GL_ARB_framebuffer_no_attachments GL_ARB_invalidate_subdata GL_ARB_multi_draw_indirect GL_ARB_program_interface_query GL_ARB_shader_image_size GL_ARB_shader_storage_buffer_object GL_ARB_stencil_texturing GL_ARB_texture_buffer_range GL_ARB_texture_query_levels GL_ARB_texture_storage_multisample GL_ARB_texture_view GL_ARB_vertex_attrib_binding GL_KHR_debug GL_KHR_texture_compression_astc_ldr GL_ARB_buffer_storage GL_ARB_clear_texture GL_ARB_enhanced_layouts GL_ARB_indirect_parameters GL_ARB_internalformat_query2 GL_ARB_multi_bind GL_ARB_query_buffer_object GL_ARB_seamless_cubemap_per_texture GL_ARB_shader_draw_parameters GL_ARB_shader_group_vote GL_ARB_shading_language_include GL_ARB_texture_mirror_clamp_to_edge GL_ARB_texture_stencil8 GL_ARB_vertex_type_10f_11f_11f_rev GL_EXT_shader_integer_mix GL_ARB_clip_control GL_ARB_conditional_render_inverted GL_ARB_cull_distance GL_ARB_derivative_control GL_ARB_direct_state_access GL_ARB_get_texture_sub_image GL_ARB_pipeline_statistics_query GL_ARB_transform_feedback_overflow_query GL_EXT_polygon_offset_clamp GL_KHR_context_flush_control GL_ARB_parallel_shader_compile GL_ARB_shader_atomic_counter_ops GL_KHR_no_error GL_KHR_texture_compression_astc_sliced_3d GL_MESA_shader_integer_functions GL_ARB_polygon_offset_clamp GL_KHR_parallel_shader_compile GL_EXT_EGL_image_storage GL_EXT_texture_sRGB_R8 GL_EXT_EGL_sync VisualID 691, 0x2b3 128 frames in 5.0 seconds = 25.596 FPS 150 frames in 5.0 seconds = 29.975 FPS 164 frames in 5.0 seconds = 32.641 FPS 
submitted by sneekyleshy to archlinuxarm [link] [comments]

Forex trading EA for Binary Option - YouTube Binary Helps - YouTube Nadex 5 Minute Binary Strategy 2020 - YouTube BINARY OPTION HELP - YouTube How to trade Binary Options  Profit of $880 from $200  TRADE BOOSTER

Binary options helper thesaurus amazing For more help with basic punctuation. Helpers at thesaurus with free online thesaurus, antonyms.spedizione veloce e reso gratuiti.building a trading strategy for.synonyms for helper at thesaurus with free online thesaurus, antonymsis. The Doctor wants you to be an educated Forex/Cryptocurrency/Binary Options trader who has vast knowledge about financial trading and the Financial Market. Do not be a gambler, be a successful Binary trader. Happy Trading! If you are serious about Binary Options trading and want to earn money regularly, then educate yourself. This MT4 indicator released by pointzero-trading with cost 99 US$. The PZ Binary Options indicator analyzes price action patterns and helps you to make positive equity decisions in the binary options market. Amazingly easy to trade Trade both call and put options No crystal ball and no predictions The indicator is non-repainting The only strategy… BINARY OPTIONS SCAM RECOVERY. If you are trading on Binary options I can give you directives on the right part to take and you can start making about $9,600 weekly. If you have lost any money to your broker or your account was manipulated I can help you recover them back. contact me at: [email protected] com Download Binary Options Robot Echo_Digits V2.01: Trading robots and strategies for binary.com: Wednesday at 2:51 PM: Recruitment of participants Last Digits Even/Odd Binary: Binary Options Robot: May 13, 2020: Download DigitsStats Binary.com bot: Trading robots and strategies for binary.com: Jun 4, 2019: Download Binary XML bot for odd digits only

[index] [5059] [3107] [1342] [340] [4024] [2705] [1878] [659] [410] [2404]

Forex trading EA for Binary Option - YouTube

Contact me if you want to Trade on FOREX & BINARY Trading and also based on Economic NEWS & Events. I Provide complete study material and my personal strategies on Binary & Forex Trading to my VIP ... Simple trading strategy on how to trade Nadex 5 minute binaries following an accurate signal indicator for binary options. Get FX Master Code signals: https:... In this video you are taking a look at Binary Options EA guide which may help you to understand profitable potential trades. I bet you will be surprised to s... Beat the binary options without falling in scam! Price action strategy trading and tutorials. Contact me here: [email protected] This video explains you best strategy that can help you make best profits. I wish you goodluck. We as a team, put a lot of effort in bringing you the summari...

#