Quasar's Doomworld Forums Blog

Quasar's Doomworld Forums Blog

Somebody deserves to be ostracized for this August 24, 2016, 3:24 pm
http://doom DOT wikia DOT com/index.php?title=WizardWorks&diff=103222&oldid=37385
http://doom DOT wikia DOT com/wiki/H!ZONE?diff=103253&oldid=98861

(Change the DOTS to periods, as DWF keeps helpfully correcting them for me)


A DMCA notice is already on its way as both of these plagiarized my own work.

Linux is driving me insane April 30, 2016, 1:20 pm
How do people seriously develop software for this? The entire OS is a monstrosity. If somebody with as much experience and broad skillset as I have can be completely defeated by this thing, then I don't understand how it works for anybody.

Originally tried to install steam-dev on Mint. Wouldn't take, complained manifest file sizes didn't match. So I trash that entire VM and install Ubuntu 14.04. After two days of confusing unhelpful error messages I figure out I'm supposed to do apt-get update and THEN try to install the chroot environment. OK that is supposedly working now.

So I bring in the code to my game. This is not an open source game. I must build this game in a way that the resulting binary is redistributable. How do I do that? I have no fucking idea. So I start just trying to compile the son of a goddamn bitch as step #1 because I need to make sure that's working at a basic level. CMake can't find libpng headers. Because something so simple doesn't come pre-installed on a kiddie candy piece of shit distro like Ubuntu.

So I apt-get install libpng-dev. And I end up with libpng12 from like, 8000 years ago. Great!!! That is FANTASTIC!!!!!! Because my PROGRAM needs libpng 1.6.12 and I have NO fucking idea how to build it, there are no DIRECTIONS anywhere on how to build it, and, after 2 hours of googling for any sort of advice I have found NOTHING. And everybody on IRC can just stare blankly at me like I'm a fucking idiot for not knowing what a deb is.

I am goddamn tired of this, it is all bullshit. What would be simple problems anywhere else, that in most cases should not exist to begin with, are impossible to do anything about without already knowing every possible arcane command line invocation for the entire operating system. There are NO inroads to this shit. You either already know it or you have to get somebody who does to do it for you.

Windows rogue update KB2952664 September 20, 2015, 11:10 am
Check your Windows 7 system to see if you have a persistent rundll32.exe listed in taskmgr. If so, install SysInternals' Process Explorer, if you don't already have it on your system, and elevate it to administrator. Find the rundll32.exe and you will see that it was started by a service and that it is hosting not a DLL, but an executable called wicainventory.exe, which claims by name to be "Windows Installer Compatibility Assistant," a relatively benign sounding component.

Watch the open file and registry handles of the process and you will see that it is, at the cost of significant CPU cycles and hard drive access time, gradually scanning every file on your system, particularly anything that is executable, and is logging it into Microsoft "telemetry" files.

This update, originally pushed out in April, is yet another cog in the Windows 10 "upgrade" process and can have a serious impact on system performance. It is also highly questionable what kinds of "telemetry" it is collecting and where that data is being sent, but it definitely has nothing to do with assisting compatibility for installs as it claims.

Also, you'll find that if you try to uninstall this update, you cannot. Trying will lead to a failure and rollback, though the service and the rundll process that it spawns seem to disappear in the process. I am currently watching my system to ensure that these processes do not respawn.

If they do, a full fresh install from the Windows 7 retail disc will be the only option. The belligerently adversarial nature of recent Windows updates is leading me toward disabling the functionality altogether.

My current number of GitHub YTD contributions... May 17, 2014, 3:51 pm

Excellent. >:)

You darn kids February 28, 2013, 2:00 pm
You kids and your damn object-oriented virtualized sanitized BDSM languages and APIs:
Incidentally, although Final Cut Pro X has been fully rewritten as a 64-bit Cocoa application, it was missing a significant number of features found in the discontinued Carbon version.
Everybody's forced to upgrade to the 'newest thing' but the newest thing is too much of a fuckin' pain in the ass - so slow, so abstracted, so bothersome, so bloated, so Brobdingnagian - that when something finally does get rewritten, it's a half-assed shell of what it once was.

Respect your elders. We wrote assembly on bare metal and instructed the machine in its own language. But our programs worked and did not sacrifice functionality for gloss or hipster bullshit like social media integration - the program WAS the functionality. And we sure as hell didn't pay $100 a year to kiss the ass of some self-proclaimed god of the platform for the right to code, and our programs didn't ship as encrypted, signed, DRM'd interpreted bytecode either.

Actually, I'm being (mostly) sarcastic/facetious/cantankerous for the sake of it ;)

Just an observation of mine January 9, 2013, 11:23 am
You might remember the top image was created a while back by some random person on the internet to illustrate what might have been the end result of the lack of net neutrality - "channelization" of the internet into regulated sets of "sites", each operating in a proprietary manner and possibly charging its own fees for access.

All hail the Brave New World of the app store, bringing us the same compartmentalized environment regardless of net neutrality, while being replete with regulated, licensed development, signed interpreted code, strictly controlled access to vastly neutered and terribly inefficient APIs, and most importantly, an anti-trust-laws-defying racket by which the owning company gets to siphon profits off of all software development targeted at that platform.

Welcome to your worst nightmares.


My precious Nikki December 16, 2012, 12:23 am
My sweet precious cat Nikki passed on this evening at around 10:55 central time. She had been terminally ill with heart failure and kidney failure for the last 3 or so days, after suffering a stroke that mostly disabled her back legs. She died a natural death, due to heart attack, and we were with her comforting her as much as we could.

I will be working on an online tribute for her, as she was my best friend for 20 years and I loved her like I would my own child. I'll post a link to it here when it is ready.

C++11 Properties November 11, 2012, 1:04 am
Here's a method I worked out for duplicating the semantics of Borland Delphi/C++Builder-style properties under C++11, via the use of lambda functions which capture "this" by-value:

/** @file VIBProperties.h
* VIB Class Library - C++11 Properties Implementation


#include <functional>

namespace VIB
template<typename T> class Property
typedef std::function<T (void)> Getter;
typedef std::function<void (const T &)> Setter;

Getter get;
Setter set;

/** Default constructor, you must initialize get and set later. */
Property() : get(), set() {}

/** Provide get and set callbacks at instantiation. */
Property(const Getter &pGet, const Setter &pSet) : get(pGet), set(pSet)

/** Late-initialize the callbacks. */
void initCallbacks(const Getter &pGet, const Setter &pSet)
get = pGet;
set = pSet;

/** Cast operator, invokes get() and returns its value. */
operator T() { return get(); }

/** Assignment operator, invokes set with the provided value, returns this object. */
Property<T> &operator = (const T &nv) { set(nv); return *this; }

* Invokes get, assuming it returns a pointer that can be used with the
* deref-access arrow operator. If not, you will cause a compile-time error
* by trying to use it.
T operator -> () { return get(); }

template<typename T, typename A> class ArrayProperty : public Property<T>
/** Default constructor, you must initialize get and set later. */
ArrayProperty<T, A>() : Property<T>() {}

/** Provide get and set callbacks at instantiation. */
ArrayProperty<T, A>(const Getter &pGet, const Setter &pSet)
: Property<T>(pGet, pSet)

A operator [] (int i) { return this->get()->operator[](i); }


To set one up involves code like this:

class Foo { public: Property<int> SomeProperty; Foo(); ... };
Foo::Foo() : SomeProperty()
[=] () { return someMethod(); },
[=] (const int &i) { doSomething(i); });

This allows expressions such as "bar.SomeProperty = 1;" or "int x = bar.SomeProperty;".

The usual objection to similar implementations without this-capturing lambdas, which act like anonymous private methods of the containing class, is that the class itself isn't notified of the access to the property object. This design above completely resolves that problem with a minimum requirement for boilerplate.

BTW, I designed this at work as part of a system that exposes the Borland-specific IBExpress API, for interacting with InterBase compatible libraries such as the open-source Firebird, to other compilers such as Visual C++, freeing it from dependence on the nearly unusable C++Builder IDE.

Hi from Indianapolis February 13, 2012, 7:55 pm
Just posting to let everybody know I am in Indianapolis for the week for some training on a lab system.

I am a little too full of wine at the moment to explain much more than that :P

Crazy query October 21, 2011, 5:46 pm
Here's the *partially completed* Firebird SQL query that will export Prometheus' demographics info into the Allscripts EHR ;)

/*ID */ P.id patient_external_id,
/*NAMES */ substring(PN.first_name from 1 for 20) patient_first_name,
substring(PN.middle_name from 1 for 1) patient_middle_initial,
substring(PN.last_name from 1 for 20) patient_last_name,
substring(PN.suffix from 1 for 8) patient_suffix,
/*PTSTRT1*/ substring(coalesce((MA.line1 || coalesce((' ' || MA.line2), '')), (HA.line1 || coalesce((' ' || HA.line2), ''))) from 1 for 40) patient_street1,
/*PTSTRT2*/ case when MA.id is not null and HA.id is not null and substring(MA.zip from 1 for 5) = substring(HA.zip from 1 for 5)
then substring((HA.line1 || coalesce((' ' || HA.line2), '')) from 1 for 40) end patient_street2,
/*PTCITY*/ substring(coalesce(MA.city, HA.city) from 1 for 30) patient_city,
/*PTSTATE*/ coalesce(MAILST.item, HOMEST.item) patient_state,
/*PTZIP*/ substring(coalesce(MA.zip, HA.zip) from 1 for 5) || coalesce(substring(coalesce(MA.zip, HA.zip) from 7 for 4), '') patient_zip,
/*PTPHONE*/ (select first 1
case when substring(IPCI.phone_number from 1 for 1) = '1' then substring(IPCI.phone_number from 2) else IPCI.phone_number end
from person_contact_info IPCI
where IPCI.id in (HP.id, HA.id, MA.id)
order by IPCI.last_update_stamp desc) patient_phone,
/*WKPHONE*/ (select first 1
case when substring(IPCI.phone_number from 1 for 1) = '1' then substring(IPCI.phone_number from 2) else IPCI.phone_number end
from person_contact_info IPCI
where IPCI.id in (WP.id, WA.id)
order by IPCI.last_update_stamp desc) patient_work_phone,
/*PTEMAIL*/ (select first 1 substring(IPCI.email_address from 1 for 40)
from person_contact_info IPCI
where IPCI.id in (HA.id, MA.id, HP.id, WA.id, WP.id) and IPCI.email_address like '%@%'
order by IPCI.last_update_stamp desc) patient_email_address,
/*GENDER */ substring(GT.item from 1 for 1) patient_sex,
/*SSN */ P.social_security_number patient_ssn,
/*DOB */ (extract(year from P.birth_date) || LPAD(extract(month from P.birth_date), 2, '0') || LPAD(extract(day from P.birth_date), 2, '0')) patient_date_of_birth,
/*MR# */ '' patient_medical_record_no,
/*MRLID */ '' patient_medical_record_loc_id,
/*MRLDESC*/ '' patient_medical_record_loc_desc,
/*MARITAL*/ case when MT.item = 'SEPERATED' then 'X' else substring(MT.item from 1 for 1) end patient_marital_status,
/*STUDENT*/ '' patient_student_status,
/*EMPSTAT*/ '' patient_employment_status,
/*COMMENT*/ '' patient_comment,


/*CELL*/ case when substring(CP.phone_number from 1 for 1) = '1' then substring(CP.phone_number from 2) else CP.phone_number end patient_cell_phone
from people P
inner join person_names PN on P.person_names_id = PN.id
left join person_contact_info MA on MA.id = P.mailing_address_id and MA.current_id >= 3
left join person_contact_info HA on HA.id = P.home_address_id and HA.current_id >= 3 and HA.id is distinct from MA.id
left join person_contact_info HP on HP.id = P.home_phone_id and HP.current_id >= 3 and HP.id is distinct from HA.id and HP.id is distinct from MA.id
left join person_contact_info WA on WA.id = P.work_address_id and WA.current_id >= 3 and WA.id is distinct from MA.id and WA.id is distinct from HA.id and WA.id is distinct from HP.id
left join person_contact_info WP on WP.id = P.work_phone_id and WP.current_id >= 3 and WP.id is distinct from WA.id and WP.id is distinct from MA.id and WP.id is distinct from HP.id
left join person_contact_info CP on CP.id = P.cell_phone_id and CP.current_id >= 3 and CP.id is distinct from MA.id and CP.id is distinct from HA.id and CP.id is distinct from WP.id and CP.id is distinct from HP.id
left join gender_types GT on P.gender_id = GT.id
left join marital_types MT on P.marital_id = MT.id
left join state_types MAILST on MA.state_id = MAILST.id
left join state_types HOMEST on HA.state_id = HOMEST.id
P.id > 0 and
PN.first_name <> '' and
exists (select * from tasks T where T.person_id = P.id and T.date_of_task >= '1/1/2008') /* Modified RE: Boren's request - visit in last 3 calendar years */
order by P.id