tag:blogger.com,1999:blog-87681441042806242682024-03-14T06:05:03.151-07:00TechnoDweebTimesA blog on all things technical - mostly computer oriented. Ideas, Rants, answers, questions whatever.Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.comBlogger24125tag:blogger.com,1999:blog-8768144104280624268.post-59016836377193851952023-08-06T18:47:00.007-07:002023-08-06T19:12:44.445-07:00My career at Microsoft<p>I was watching <a href="https://www.youtube.com/watch?v=HYzbihjcbLs" target="_blank">this video</a> which included an interview with Dave Plumber who is an ex-Microsoft-dev like myself who worked on much of the same stuff as I did and his stories bring back fond and not-so-fond memories of my 20 years as a developer at Microsoft.</p><p><b>How I got into Microsoft:</b></p><p>My father lost all his money about the time I graduated High School and at that time I got a soldering job with a company called Processor Technology which invented an S100 bus based 8080 system known as the SOL.</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9Ku6IOfTwyrJv-Plg-QgG_XyBv7IaBkmtHaHLobKzF6ePHk7fqEopKRGHTWoDoY53NvWfjCR0S3MyiZKLwb3OsCsNhlMby0IXvKRxu6J0fVeJHu4m8y_tN0mKBk42gcvy2DI26aPCMeiHX0AErdHyzBa8BKn3-vlsR7ZY9NTe6uw_qBvKo5M3gQLPioY4/s800/The%20Processor%20Technology%20SOL%20-%201975.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="446" data-original-width="800" height="178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9Ku6IOfTwyrJv-Plg-QgG_XyBv7IaBkmtHaHLobKzF6ePHk7fqEopKRGHTWoDoY53NvWfjCR0S3MyiZKLwb3OsCsNhlMby0IXvKRxu6J0fVeJHu4m8y_tN0mKBk42gcvy2DI26aPCMeiHX0AErdHyzBa8BKn3-vlsR7ZY9NTe6uw_qBvKo5M3gQLPioY4/s320/The%20Processor%20Technology%20SOL%20-%201975.jpg" width="320" /></a></div><p><br /></p>The company was starting in a garage about 2 blocks from my home in Livermore California. That was an amazing stroke of luck to be there - at about the same time as Apple Computer was also in a garage.<p></p><p>The two companies were in fierce competition and somebody got the idea to buy up all of a very common but very necessary chip that forced Processor Technology (PT) quickly out of business.</p><p>Before they died, however, I joined the US Navy and as I was going to schools to prepare myself to become a Nuc on a submarine, I asked my old boss if I could buy a kit for a SOL. After saving up for a few months it was delivered to my A school in Chicago where I put it together (soldering was necessary as well as assembly) and, after finding it not working, I sent it back to PT to fix it. I was learning to program it in Basic and 8080 Assembly Language from then till entering Microsoft.</p><p>Later, when I got to the Submarine, I would, on long runs, bring it and play with it while underwater. This got me very good at 8080 assembly language which I would code up on a pad of paper while standing a boring watch in the nuc plant. (This was not allowed, but boredom has its motivations). Thus, in time, I had most of 8080 assembly language memorized and knew the processor intimately.</p><p>When I got out of the Navy, I went college, now that I had the GI Bill to make it possible, and proceeded to ace all but 2 classes and graduated with honors.</p><p>That was when Steve Wood, one of the coders of the DOS Kernel was recruiting devs for Microsoft. He and I hit it off well and he arranged for me to go to Redmond for an interview.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKcilMrJtPELvmkIR604zH4ef-e6hdFFRPF0b_dTquQ3vtgUB3Xehbn5StTdCDd9gYt4fVD9MyIRBt-Hb7nHxfwLzXQVjsDvVUmfQH9Lo3NOlvOa15x75aUbCv7aKoxSuN_pvN4JHjtqivTnKi0B8c6PGb3LBNr10-v93MuWjjmkSBBdVZl0LqA7WQU2Wg/s434/Microsoft-Steve-Wood.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="342" data-original-width="434" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKcilMrJtPELvmkIR604zH4ef-e6hdFFRPF0b_dTquQ3vtgUB3Xehbn5StTdCDd9gYt4fVD9MyIRBt-Hb7nHxfwLzXQVjsDvVUmfQH9Lo3NOlvOa15x75aUbCv7aKoxSuN_pvN4JHjtqivTnKi0B8c6PGb3LBNr10-v93MuWjjmkSBBdVZl0LqA7WQU2Wg/s320/Microsoft-Steve-Wood.jpg" width="320" /></a></div>I was hired after a long day of trying to impress some of the smartest people I have ever met and became employee #1000 at Microsoft in September of 1986.<div><br /></div><div><b>My early days at Microsoft:</b></div><div><br /></div><div>I did too well in my interviews. I got married soon after the interview but before starting at Microsoft and wanted to do a honeymoon in Europe over the summer of 1986 and asked Microsoft if I could wait to start till September and they said, and I quote "Sure, we're not proud".</div><div><br /></div><div>The day I started was the stock market crash of 1986 and at first I thought this was a horrible thing - the stock was crashing, but then I found out that my stock options were entered on that same day. I had better options than people that had been there for over 5 years!</div><div><br /></div><div>I was immediately put into the "Presentation Manager" group for OS/2 which is the code that does all the core window management and UI for the OS. This was one of the top dev teams at the company. I shared an office with this other new hire, Darren Massena, who was way smarter than me but a nice guy and who later became the architect and main developer of a kids shell for Windows which was touted as being very cool but ended up being rejected by our customers.</div><div><br /></div><div>This was the era of being a "cool" super smart dev at one of the biggest software companies in the world and egos were super big in those days.</div><div><br /></div><div>Since I didn't know C at the time of my hire, my first job was to go with our team to Boca Raton in Florida and work on the OS/2 kernel with the guys. I was given a very poorly written scheduler function to fix and turned 100 locs into about 3 - (IBM in those days paid by the line of code).</div><div><br /></div><div>The rest of my time there I really had little I was able to do and played my guitar to help soothe the atmosphere for the others. This historic shot was taken of the team there. We did some amazing things, blew the IBM execs away and got that baby shipped several months later.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsR3Y8lldAuzUKiuXgbzZfo31H3aJdgL6oLQQ07GSLI7h2xSmX2lauawlkjDuQw44ffTvQwjgvx6tcdnm-5RcSTjOKi0-ZpD9cF1GSFuOfQrRsNGnwi0FLQusYtyZs85ZhLdtt73JVEXGw-x-D6y3afToDXhgJHmol5VtZEoPEoJ9-KR7ODZEXG67UJdJk/s1396/Boca%20os2%20dev%20team%20with%20thankyou%20card%20from%20billg.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="715" data-original-width="1396" height="335" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsR3Y8lldAuzUKiuXgbzZfo31H3aJdgL6oLQQ07GSLI7h2xSmX2lauawlkjDuQw44ffTvQwjgvx6tcdnm-5RcSTjOKi0-ZpD9cF1GSFuOfQrRsNGnwi0FLQusYtyZs85ZhLdtt73JVEXGw-x-D6y3afToDXhgJHmol5VtZEoPEoJ9-KR7ODZEXG67UJdJk/w653-h335/Boca%20os2%20dev%20team%20with%20thankyou%20card%20from%20billg.png" width="653" /></a></div><br /><div>For that we got a 2 week all expenses paid trip to Maui by and with Bill Gates and Steve Balmer with spouses. There never was a better ship party in the history of Microsoft.</div><div><br /></div><div>After my early temporary offices I got a nice window office just 2 doors down from Steve Balmer's.</div><div>Dave Plumer had an office down and across the hall from me but we never really met each other or worked together. We were two very lucky dudes that enjoyed a golden time at Microsoft when it was full of smart and motivated people, no HR, no lawyers, and tons of money coming in over time from the incredible stock options.</div><div><br /></div><div>Another job I got was to do a "simple" mapping of window handles in and out of the presentation manager API. This was at very early time in my career. The assembly language was no problem for me, and it was a great way to get to know the system better, but the logistics of adding the mappings to every API that either took or returned an HWND was daunting as I had to mess with almost every file in the user.dll module while learning my editor, getting used to building tons of code that took hours to build, learning C, and dealing with a constantly churning source code with the SLM (AKA Slime) source control system. </div><div><br /></div><div>It left me frozen and overwhelmed. </div><div><br /></div><div>Even some tester's would come to help me and my boss had the whole team hold off in check-ins for a week to help me get the thing done. But I just failed. I simply could not get my head around the logistics of the problem and the project got handed over to another more experienced dev. It was very much a project where everything had to be perfect or nothing would work. </div><div><br /></div><div>I was shattered. </div><div><br /></div><div>Steve Wood came to my office to talk with me and try to help me but I was so embarrassed I couldn't even talk to him. If someone looked over my shoulder I couldn't think. I sat there silent till he left.</div><div><br /></div><div>Years later at a reunion of the NT team I tried to get a hold of him and apologize for that time. We could have been good friends during my whole time in Systems had I not been so proud and embarrassed.</div><div><br /></div><div>I had a terrible review for that period but my boss Neal Konzen, let me stay on board. He knew I was just trying too hard.</div><div>From then on I was considered by many to be an idiot. I even caught the guys one night talking about me (they hadn't realized I was in the room eating pizza with them) and when they realized that I was there, they were a bit embarrassed as was I.</div><div><br /></div><div>So the massive expectations on my performance were lifted and I was given much smaller and simpler projects from then on to do.</div><div><br /></div><div>One of those simpler projects was to write a sample DDE (Dynamic Data Exchange) app for OS/2. </div><div>DDE was a hack invented over a weekend by the Excel team to show off dynamic stock quotes to Roiters and was a bit clunky to use. Yet as clunky as it was, it was needed to tell the shell in Windows III what icon an app used to identify itself at setup time. So the protocol became imbedded into that OS well before I was even there and naturally was ported to OS/2 and NT.</div><div><br /></div><div>I decided to make my own DLL with an API to simplify it for others. When the test team got ahold of it, they told our dev manager, Karl Stock, that it was just too powerful an API to test in the time left to ship so they said they would just ship the source and not compile it.</div><div><br /></div><div>That was fine by me. I was just happy to have been able to do that and work at Microsoft with such amazing people.</div><div><br /></div><div>A few months after we shipped, Adobe came to Microsoft and demanded that they port my DLL to Windows III and so I spent some time doing that.</div><div>Then Windows NT was starting up, I was tasked with porting it to there, but that was a much harder job because Windows NT had no global memory which DDE used for IPC (Inter-Process Communication). I had to use kernel level "thunks" to simulate global memory. My API became the only way to do IPC on NT because the old message protocol could not work on NT.</div><div><br /></div><div>It eventually moved into the WIN23 API set in user32.dll and was there to stay.</div><div><br /></div><div>After solving that problem, the OLE team approached me and wanted to use my DLL as the glue for OLE.</div><div><br /></div><div>What I wrote became very much imbedded into the OS for many reasons.</div><div><br /></div><div>We then hired a guy from the UK that had implemented a network version of DDE and I inherited that code to maintain as well.</div><div>So for about 7 years I was the DDE master of the universe and was quite happy with working on a limited domain of code that was all mine.</div><div><br /></div><div>I often wonder what would have happened had I written a book on DDE as I had an idea for a convention of how to use DDE that may have caused it to have a much bigger impact on computing. At the time, I just loved coding too much to take the time to write a book.</div><div><br /></div><div>I did lots of other things as well including the OS/2 Icon Editor, the NT and OS/2 resource compiler, the Dialog Editor, The Win 16/32 porting layer, NT header files, and lots of bug fixes including handling NT system deadlock issues.</div><div><br /></div><div>My bosses were so supportive despite the fact that I was a slow and pretty weak dev.</div><div><br /></div><div>Later, on a large port of the icon code from Windows III to NT for XP, after two months of struggling with the port and enhancing it to do things Windows III couldn't do, my hard disk crashed and I had no backup! That ended my time in Systems - the schedule slipped because of me and I had to go.</div><div><br /></div><div>The rest of my time at Microsoft was working in the Applications division where I did projects like Sidewalk, eShop, MSN Yellowpages, and MSN Messenger.</div><div><br /></div><div>The Messenger team had exceptional managers and I loved working with that team.</div><div><br /></div><div><b>How I got fired, possibly due to an NSA back door in Windows NT</b></div><div><b><br /></b></div><div>After 20 years at Microsoft as a dev, my son was about to graduate High School and I knew I might never be able to do a nice family vacation with him again. I decided to ask my manager if it would be ok if I took 2 months off to take my family to Europe. This was close to my 20 year anniversary at the company.</div><div>My boss and my boss's boss were cool with that but once it got up to the VP level for approval I got the word that HR would not allow it. I was told I simply didn't rate high enough in the dev hierarchy to do that. My managers at the Messenger team were trying to get me to that level which involved giving me the responsibility of integrating 3 dev teams of work each day, testing it for bugs and getting ahold of the proper dev to fix it. It wasn't very fun as there was no creativity in the job and high stress.</div><div><br /></div><div>I never wanted to go up a ladder. I just wanted to do what I did best and do it well.</div><div><br /></div><div>I told them "either I am coming back or I am not." and HR would not budge. I took the vacation and left the company.</div><div><br /></div><div><b>Now there is an interesting back story to this and that is the NSA back door issue. </b></div><div><br /></div><div>A few months before this vacation idea happened, I heard an announcement that the NSA had a big secret project for the NT team. I was very suspicious of a back-door going in so I emailed all the V.P.s in my division asking if this was so.</div><div><br /></div><div>No response was ever received.</div><div><br /></div><div>Another weird thing about my leaving Microsoft was that HR had scheduled an exit interview with me but when I went to that meeting, they took my key-card and the person I was to speak with was nowhere to be found. I was stood up.</div><div>No exit interview for me - and I was quite upset that they would basically fire me because I took a 2 month unpaid vacation after 20 years of loyal service to that company.</div><div>It left a bitter taste in my mouth but I don't blame anybody at the company but HR.</div><div><br /></div><div>It was a very different attitude from the "we're not proud" one I came in with.</div><div><br /></div><div><b>Why I succeeded</b></div><div><b><br /></b></div><div>Most of my best accomplishments at Microsoft were due to my attitude of helping others. It seemed every time I did a good deed for either the customer or others, it would come back to me as a benefit.</div><div>People liked working with me because I was not an ego-maniac or overly proud and I didn't care what work they had for me - I'd happily do it.</div><div> </div><div>When I was at UC Berkeley, I had to work with the SPICE circuit simulator program which had a very cryptic way of describing a circuit for input to the program. So I wrote up a quick-reference card with TROFF that fit on a 3x5" card for myself and decided to give it to the head professor of the SPICE program for others to benefit from. For that the professor gave me 15 accounts on the most powerful computers on campus at that time.</div><div><br /></div><div>What I didn't realize at the time was that he also listed me as a contributor to the SPICE program.</div><div>So back in 1986, when I was interviewing with Microsoft, on interviewer asked me "didn't you work on SPICE?" and I just said "yes" which was true, but they thought I wrote the code. No all I did was write a quick-reference card for the user.</div><div>This might be why they waited 3 months for me to start and threw me into one of the top dev teams in the company right off the bat.</div><div><br /></div><div>Another example was that I did lots of cleanup to the NT header files and put my name on just about every one I worked on in the file log.</div><div>When I was interviewing with the top network dev for the Messenger team, many years later, he basically offered me a job on the spot with no interview questions. It was because my name was all over those header files that he simply assumed that I was one of the gods of NT. </div><div>I ended up being a fairly weak UI dev for that team but everyone supported and respected me simply because I had so much experience.</div><div><br /></div><div>Overall I am so grateful for having had the opportunity to enjoy "the good old days" as described by Dave Cutler one day. They were truly some of the most rewarding and memorable years of my life.</div><div><br /></div><div>Sandy</div><div><b><br /></b></div>Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0tag:blogger.com,1999:blog-8768144104280624268.post-87398044829515414102022-11-17T07:45:00.000-08:002022-11-17T07:45:01.006-08:00<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii84pU5ta0u3-CYYHBZkgaO0qXhGhfqx9jbgQomYhr2kZS82jqwy2JgNDfrSoXlJ2A-GhSXppqxi70BxIs-oYaRsPuGHDsU54pdRZLcovdIdjLeTbumgzBk3DKZISaiam4WntX8t0mOnzKn29Wu6qD_n9xlX6xAP_ydMTqVMPTJllMXJ8gCNRTBTomKQ/s518/Tire%20Sensor.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="518" data-original-width="454" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii84pU5ta0u3-CYYHBZkgaO0qXhGhfqx9jbgQomYhr2kZS82jqwy2JgNDfrSoXlJ2A-GhSXppqxi70BxIs-oYaRsPuGHDsU54pdRZLcovdIdjLeTbumgzBk3DKZISaiam4WntX8t0mOnzKn29Wu6qD_n9xlX6xAP_ydMTqVMPTJllMXJ8gCNRTBTomKQ/s320/Tire%20Sensor.jpg" width="280" /></a></div><br /> Yes it's yet another case of purposeful design to rip off the customer and make more cash.<p></p><p>I own a Toyota Prius and there are some good things about it but a couple of issues have really pissed me off. One is my emissions system which has some problem that causes the check engine light to come on. I cannot (according to the dealer) get that error code bypassed so I can get my check-engine light back into service for truely serious issues. The emissions feature is only there to satisfy an California law. I live in Idaho so it's not a problem for me to have a hairline crack that is leaking some emissions out somewhere.</p><p>So I have no working check-engine light and I have no way of observing battery charte state, oil temperature or pressure or other such things that might really be important to know sometime.</p><p>A more recent issues came up that has promoted this post.</p><p>My tire sensor light whet on and upon investigation was due to the battery for the sensor (pictured above) going dead. The tire guy told me that these simple watch batteries last about 7 years and then poop out. That is nicely beyond the waranty period of my car and it tells me that all 4 sensors are likely to fail soon.</p><p>Normally one would just change the battery to fix this but <b>Toyota glues the battery in place so it cannot be replaced! </b>So I had to pay about $90 to replace the entire tire sensor.</p><h2 style="text-align: center;">Thanks Toyota!</h2><p>I wonder if they will go the way of GM someday who is entering bankruptcy despite billions of tax-payer dollers being spent to prop them up. When you don't service the customer, customers go away (if they have a choice).</p>Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0tag:blogger.com,1999:blog-8768144104280624268.post-14452533604904024652022-11-01T04:48:00.002-07:002022-11-01T04:51:21.648-07:00Free Energy at your fingertips<p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpc1QQ9f1XT-DmPHzPTe2chNnus8b0u9tR2W0zU8HgfUg2jd8QZvSQVqHyNdmMWMWznP3ba3sQwBrOO2u2IpSsKzEBsAEdHLMb2nxIUmK9V-KjyuSE-zdtTdhc8rca1r6kkoqfjlMEC665z1SEgygHk8MRe-82cN14kcXMqPP5T3lc5QlQe17qRBhoyA/s1001/geothermal-diagram.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="699" data-original-width="1001" height="446" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpc1QQ9f1XT-DmPHzPTe2chNnus8b0u9tR2W0zU8HgfUg2jd8QZvSQVqHyNdmMWMWznP3ba3sQwBrOO2u2IpSsKzEBsAEdHLMb2nxIUmK9V-KjyuSE-zdtTdhc8rca1r6kkoqfjlMEC665z1SEgygHk8MRe-82cN14kcXMqPP5T3lc5QlQe17qRBhoyA/w640-h446/geothermal-diagram.jpg" width="640" /></a></div><h1 style="text-align: center;">Free energy is all around us</h1><div>My home has a nice geo-thermal heating system that has worked for years. If you can afford one, get one as it is way more efficient than any other heating system I know of.</div><div>That's because the earth is an infinite heat source and heat sync. Just dig a trench about 4' down, run a tube through it, fill the trench with water if you like or use a pond to make heat conductivity more efficient and you can now use a simple heat-pump to heat or cool your home.</div><div style="text-align: center;"><b>But no there more!</b></div><div style="text-align: left;">With the use of a sterling engine, you can actually generate electricity from the temperature differential you get with your geo-thermal heat pump and guess what? As long as your trench is big enough to transfer the heat quickly enough, you can use that to power your home as well!</div><div style="text-align: left;">I spoke with an HVAC specialist at costco one time and mentioned this idea to him. He said, "sure it's possible but then we would be out of business".</div><div style="text-align: left;">Yes, that IS the problem. The power's that be do not want simple and free energy. It breaks their whole machivelian plans for global conquest.</div><div style="text-align: left;">Well, I'm just sayin - it CAN BE DONE.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCt8JH-MtLIm9GE2kW-TiD2gj0XhFbxIAz_xbzpZRuLwkpJnfBjNIFEfkjUTvUKuEIpam4EtCOmlPD6aUAmHEPboLpHH3b9aT2sUhw6Ryfr9-Z4jQAcCBvnC6Tj2dOK_MFeGSgP1cmFSMSkgeMAp0mUKUfKy-Q6fwxMN6-fMad39GO0EZBYGIS0QB76Q/s768/sterline%20engine%20toy.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="526" data-original-width="768" height="438" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCt8JH-MtLIm9GE2kW-TiD2gj0XhFbxIAz_xbzpZRuLwkpJnfBjNIFEfkjUTvUKuEIpam4EtCOmlPD6aUAmHEPboLpHH3b9aT2sUhw6Ryfr9-Z4jQAcCBvnC6Tj2dOK_MFeGSgP1cmFSMSkgeMAp0mUKUfKy-Q6fwxMN6-fMad39GO0EZBYGIS0QB76Q/w640-h438/sterline%20engine%20toy.png" title="A toy sterling engine" width="640" /></a></div><br /><div style="text-align: left;">You can buy a toy sterling engine for $60 <a href="https://www.ebay.com/itm/144249017498?var=0" target="_blank">here</a>.</div><div style="text-align: left;">Good luck in finding a large one that can do useful work for you. Bit it is definitely possible and simple with no fancy perpetual machine BS. The idea works.</div><div style="text-align: center;"><b>C'mon Elon, get with the program!</b></div><p></p>Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0tag:blogger.com,1999:blog-8768144104280624268.post-7984610311592400632021-12-31T10:27:00.003-08:002021-12-31T10:37:16.798-08:00You don't really own that OS<h2 style="text-align: left;"> Hey so why can't I use more than 8% of my CPU on Windows?</h2><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiKQ0w2D3P6kcJgZK23QzOnk9CF9AkdYqz-yDcacYVCDTGIfpjlZogrU0zOpccwWcUUmMF9kU7gROl98kwE_LvJanH7ajKlT068_BzN3MFL0SkFjta8KYOBjpaC-yqHyOuCiwR3drSy7hAFrxKxU1jirH9Lg4y3TFQl6RK5btdVL20NhWM7bNm5wMsYfA=s313" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="86" data-original-width="313" height="86" src="https://blogger.googleusercontent.com/img/a/AVvXsEiKQ0w2D3P6kcJgZK23QzOnk9CF9AkdYqz-yDcacYVCDTGIfpjlZogrU0zOpccwWcUUmMF9kU7gROl98kwE_LvJanH7ajKlT068_BzN3MFL0SkFjta8KYOBjpaC-yqHyOuCiwR3drSy7hAFrxKxU1jirH9Lg4y3TFQl6RK5btdVL20NhWM7bNm5wMsYfA" width="313" /></a><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhilPGr_muBX4b9xHtlyoXEnnZNZ0VY9MfwgVO1JO5AN1cdvEL-HgGmNbVCdUA3-pE2L9cVn6TLa4jfuYkpf0xIIXDTX_D9uzVsAl50339c-lRpKzRqOQmHJHeJDqmWMzXHp4bYYtjpu7u2MXhQPQiocteaPC0eEbqkotaNtUGI1rB5M9Xke51h1iFq7g=s860" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="860" data-original-width="528" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEhilPGr_muBX4b9xHtlyoXEnnZNZ0VY9MfwgVO1JO5AN1cdvEL-HgGmNbVCdUA3-pE2L9cVn6TLa4jfuYkpf0xIIXDTX_D9uzVsAl50339c-lRpKzRqOQmHJHeJDqmWMzXHp4bYYtjpu7u2MXhQPQiocteaPC0eEbqkotaNtUGI1rB5M9Xke51h1iFq7g=s320" width="196" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">I was running this sed tool on a very large file that taks a long time to complete. That process is cranking as fast as it can. I only have 4 CPUs and one shows its cranking full bore but the task list shows only 8% of CPU being used.</div><div class="separator" style="clear: both; text-align: left;">So where is the other 92% of my CPU?</div><div class="separator" style="clear: both; text-align: left;">I think somebody's lying to me.</div></div><br /><div><br /></div>Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0tag:blogger.com,1999:blog-8768144104280624268.post-28518632289509416802019-01-18T10:45:00.000-08:002019-01-18T10:54:31.141-08:00Windows 10 - ready to F#$% you if you step out of line.<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgm_7odSPi2Qx2cCm7pyTOFnjl63j504nFIi0LCR7bN4P7cC24KGVmk_TeKFIIatrTfIZJ2-cobtJkja5-bBjk8KhGX7aNEBGbS3IUFanRvm3FcIbwZf_YiHdk3bLbRGPYgEO9dcS4xEdQj/s1600/Windows10Broken.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgm_7odSPi2Qx2cCm7pyTOFnjl63j504nFIi0LCR7bN4P7cC24KGVmk_TeKFIIatrTfIZJ2-cobtJkja5-bBjk8KhGX7aNEBGbS3IUFanRvm3FcIbwZf_YiHdk3bLbRGPYgEO9dcS4xEdQj/s320/Windows10Broken.jpg" width="320" /></a></div>
So I was wondering why my system was taking so long to boot. Brand new PC with my first time using Windows 10 for only a month or so. Now you gotta know I was leery of the next version, as it was now 2019 and I had never yet run windows 10. Why? Well because of surprises like this.<br />
<br />
I decided to go into msconfig.exe and look at my services at startup. My GOD! It looked like there were about 160 services!<br />
<br />
I noticed a note (can't recall how I saw it) that said that some services could not be disabled.<br />
<br />
Aha!<br />
<br />
That told me that someone was wise enough to not allow a naive user to disable critical services needed for the system!<br />
<br />
Ok. It should be safe to try this.<br />
<br />
DISABLE ALL SERVICES AT BOOT<br />
<br />
Ok lets see how this does with boot time.<br />
<br />
....<br />
<br />
"Your password is incorrect. Due to security changes Windows is no longer able to access your PIN"<br />
<br />
...<br />
<br />
Uh ohhh.......<br />
<br />
Tried everything I could think of. Couldn't seem to get into the BIOS with DEL or ESC.<br />
<br />
hmmm.<br />
<br />
I looked up some forums and some people had managed to hit CTRL when logging in or waiting long enough (several hours) and eventually logging in - but others had to do a complete reinstall!<br />
<br />
I tried their hacks... no luck.<br />
<br />
Better take it in to the Computer Guy in Orofino for an expert opinion.<br />
<br />
They had several USB and DVD boot images to try to "crack" the password. No luck. The new BIOS is VERY SECURE. Lots of interlocking settings that all have to be just right to be able to boot into a USB stick or the DVD. This guy managed to get one image to boot but not the cracker one.<br />
I did manage to learn that getting into the BIOS now required either F12 at startup or to hold the SHIFT key down when pressing the restart button on the desktop (no it doesn't work with any of the other 100s of "restart" buttons placed throughout the settings UI) which will get you into DELL's troubleshooting boot system which is separate from the BIOS.<br />
I left him with it for the day and did some errands.<br />
<br />
When I returned, he had no luck in getting in and charged me $27.50 for his time, which I perfectly understood. As I left I said<br />
<br />
<div style="text-align: center;">
<span style="font-size: large;">"In software, sometimes you can work all day and accomplish nothing" </span></div>
<br />
- which is very true.<br />
<br />
So my box has been reinstalled to factory settings (that took me several hours to feel confident there was no other way to go that would work and to feel comfortable with all the settings of the BIOS, the DELL troubleshooting shell and the special OS fix and reinstall support shell from DELL).<br />
<br />
Why does crap like this happen?<br />
<br />
<div style="text-align: center;">
<span style="font-size: large;">Security and Laziness and Greed</span></div>
<div style="text-align: center;">
<span style="font-size: large;"><br /></span></div>
<div style="text-align: left;">
Sometime in the mid 90s a bunch of very good tester's at Microsoft were let go. These guys were our team of monkey testers. They didn't write a lot of code but instead simply pounded on the UI of whatever project they worked on to just find usability bugs. This is called "usability testing" and is actually where some of the best oversights of PM specs and Dev designs are found.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
There is simply no way for these kinds of bugs to be found any other way. AI is way too weak to try to find usability bugs. They require creative thinking and sound judgment to find and a it takes lot of time. To properly fix these bugs can sometimes require a complete redesign of the UI.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Without this kind of testing, and I am sure Microsoft still does some of this, it is impossible to catch traps like what I fell into. msconfig did exactly what I had told it but likely some "Update" had changed the service dependencies and left at least one critical service unprotected from "disablement" and there I am F$%$^ed royally.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
One thing in Microsoft's favor, there are now convenient ways in Windows 10 to provide feedback to Microsoft on this stuff. Do they read it? I'll never know. They've gotten a lot of feedback from me - I'll say that for sure.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Luckily, I have had to reinstall windows (all versions) over the years so many times that I have a pretty sound way of saving my important data and being able to relatively recover from this crap - but it still usually takes about 3 days before my system is back to a state where I can stop installing stuff and tweaking settings I need and just use it.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
___</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Last year I went to a Windows NT reunion and got to meet a bunch of my old work-mates. Fellow Devs that all contributed to a product that has made Microsoft over a Trillion Dollars since we finished it.</div>
<div style="text-align: left;">
Very few testers were there. Only leads and managers with long time commitment to the company were invited. The usability testers simply were no longer with us to enjoy the celebration. I am sad for them. I valued there input much more than most I think. This is because it takes a human mind to make a software product truly usable by a human.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
There are tools we could make and give customers to help them understand how to know which services are safe to pull out but there are too many forces that simply don't want to bother or share this kind of information. Its just more code to break and test and more documentation to write and maintain and makes more customers fell confident enough to mess up their systems.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
However I would love to see a tool that can show a map of all service dependencies and another one that shows all setting dependencies (that one may be impossible to make automatically) and a website that documents the registry (which I proposed to the microsoft.com team many years ago), the services and the settings - ALL of them for ALL versions and ALL updates of Windows - so users can make a better educated guess as to how to adjust things to their needs.</div>
<div style="text-align: left;">
To maintain this stuff you almost have to put links or references into the code itself to help keep changes in the code propagated to the documentation and settings UI. This is a lot more work for the dev but I think is the only way to keep the whole product from going insane and eventually having pitfalls like the one I fell into.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Unfortunately, just like the history of the automobile, eventually there just are no more ways to let the customer fix or change his own product. Eventually only the corporate devs will have the tools and knowledge needed to tweak the configuration of an OS to their needs and for the sake of money and time, the producer of the software will be forced to lock the user out of most of the guts of the product and deliver a less flexible, less usable product to the user. </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
It's just too complicated not to.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: center;">
<span style="font-size: x-large;">:(</span></div>
</div>
Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0tag:blogger.com,1999:blog-8768144104280624268.post-75526436757428781042018-08-05T16:44:00.000-07:002018-08-05T16:44:42.524-07:00On Scientific Research<div dir="ltr" style="text-align: left;" trbidi="on">
This is a response to a post from a friend of mine no facebook reproduced here:<br />
<div class="_5pbx userContent _3576" data-ft="{"tn":"K"}" id="js_1u" style="font-family: inherit; font-size: 14px; line-height: 1.38; margin-top: 6px;">
<div class="text_exposed_root text_exposed" id="id_5b6780c3f33878363677343" style="display: inline; font-family: inherit;">
<div style="font-family: inherit; margin-bottom: 6px;">
Everyday, I drive by the waterfront so I'm interested in the ships I see there. Probably the coolest are the Polar Sun and the Polar Star. They are the two largest ice breakers in the US. The Polar Sun is deactivated and it's parts are being used to keep the Polar Star running.</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
The Polar Star has one mission... to open the channel every year to McMurdo Station. Without it, our science stations in Antarctica are at risk, since McMurdo is the largest base and supports most of t<span class="text_exposed_show" style="display: inline; font-family: inherit;">he others.</span></div>
<div class="text_exposed_show" style="display: inline; font-family: inherit;">
<div style="font-family: inherit; margin-bottom: 6px;">
There's been a push to get a new icebreaker to replace her... since if she breaks and we can't repair her with parts from the Polar Sun... we're kinda screwed.</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
The Senate allocated $750 million in Feb to build a replacement... and it still needs to be passed. But the Donald "littlefinger" Trump moved all the funding from the icebreaker to the border wall. So much more Making American Science Great Again.</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
<a data-ft="{"tn":"-U"}" data-lynx-mode="asynclazy" data-lynx-uri="https://l.facebook.com/l.php?u=https%3A%2F%2Fphys.org%2Fnews%2F2017-07-polar-icebreakers-critical.html&h=AT0XGdC-wdZnixV_mPwqlchkOftoi-7srii0G76IxB-vX9akFZo4_jbOYSXJ2Vm8gJKeP_JxS96vExVrDO9R9TkPCL_ySszJN61SHyguFd-TqzyCjtskCRRIHtMsOU-BF2r0ow" href="https://phys.org/news/2017-07-polar-icebreakers-critical.html" rel="noopener nofollow" style="color: #365899; cursor: pointer; font-family: inherit; text-decoration-line: none;" target="_blank">https://phys.org/ne…/2017-07-polar-icebreakers-critical.html</a></div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
<a data-ft="{"tn":"-U"}" data-lynx-mode="asynclazy" data-lynx-uri="https://l.facebook.com/l.php?u=https%3A%2F%2Fwww.stripes.com%2Fnews%2Fcoast-guard-icebreaker-funding-reallocated-to-us-mexico-border-wall-1.540857&h=AT3YGJgY_5f5NwrBQ9UQK3qpL3tNlHJO-EzaCzT2PUcZYPeFJ-vdlNBbIeb8twl8lgcYehOMwUDAyUPpSGbOBWc691wmXfxQy1w4GZa6Kw6e209Cha1y5bgLOctSbzXzI4ZjlA" href="https://www.stripes.com/news/coast-guard-icebreaker-funding-reallocated-to-us-mexico-border-wall-1.540857" rel="noopener nofollow" style="color: #365899; cursor: pointer; font-family: inherit; text-decoration-line: none;" target="_blank">https://www.stripes.com/…/coast-guard-icebreaker-funding-re…</a></div>
</div>
</div>
</div>
<div class="_3x-2" data-ft="{"tn":"H"}" style="font-family: inherit;">
<div data-ft="{"tn":"H"}" style="font-family: inherit;">
<div class="mtm" style="font-family: inherit; margin-top: 10px;">
<div class="_6m2 _1zpr clearfix _dcs _4_w4 _41u- _59ap _2bf7 _64lx _3eqz _20pq _3eqw _2rk1 _359m _3n1j" data-ft="{"tn":"H"}" id="u_fetchstream_2_y" style="background-color: #f2f3f5; border-radius: 0px; border: none; box-shadow: none; font-family: inherit; margin-left: -12px; margin-right: -12px; max-width: max-content; overflow: hidden; position: relative; z-index: 0; zoom: 1;">
<div class="clearfix _2r3x" style="font-family: inherit; zoom: 1;">
<div class="lfloat _ohe" style="float: left; font-family: inherit; width: 500px;">
<span class="_3m6-" style="font-family: inherit;"></span><br />
<div class="_63yw" style="font-family: inherit; position: relative;">
<div class="_6ks" style="font-family: inherit; line-height: 0; position: relative; z-index: 1;">
<span class="_3m6-" style="font-family: inherit;"><a data-lynx-mode="asynclazy" data-lynx-uri="https://l.facebook.com/l.php?u=https%3A%2F%2Fphys.org%2Fnews%2F2017-07-polar-icebreakers-critical.html&h=AT21tCfsJu4eXRnMO2rlCtT5crcxAJDyfdKpo68KLb0nqZdpXQhKpPhYnEoUGrNw42qoekN8SvBx6AL_VOf0KT5PF4gYE-KZTujMCDl1M2pDzVlMS8bjA5rCzIZr" href="https://phys.org/news/2017-07-polar-icebreakers-critical.html" rel="noopener nofollow" style="color: #365899; cursor: pointer; font-family: inherit; text-decoration-line: none;" tabindex="-1" target="_blank"></a></span><br />
<div class="_6l- __c_" style="background-color: white; font-family: inherit; position: relative;">
<div class="uiScaledImageContainer _6m5 fbStoryAttachmentImage" style="background-position: 50% 50%; background-repeat: no-repeat; color: rgba(0, 0, 0, 0.15); font-family: inherit; height: 261.111px; overflow: hidden; position: relative; width: 500px;">
<span class="_3m6-" style="font-family: inherit;"><a data-lynx-mode="asynclazy" data-lynx-uri="https://l.facebook.com/l.php?u=https%3A%2F%2Fphys.org%2Fnews%2F2017-07-polar-icebreakers-critical.html&h=AT21tCfsJu4eXRnMO2rlCtT5crcxAJDyfdKpo68KLb0nqZdpXQhKpPhYnEoUGrNw42qoekN8SvBx6AL_VOf0KT5PF4gYE-KZTujMCDl1M2pDzVlMS8bjA5rCzIZr" href="https://phys.org/news/2017-07-polar-icebreakers-critical.html" rel="noopener nofollow" style="color: #365899; cursor: pointer; font-family: inherit; text-decoration-line: none;" tabindex="-1" target="_blank"><img alt="" aria-label="Image may contain: ocean, outdoor and water" class="scaledImageFitWidth img" height="262" src="https://external-sea1-1.xx.fbcdn.net/safe_image.php?d=AQDcLWPaqSv_zCPO&w=540&h=282&url=https%3A%2F%2F3c1703fe8d.site.internapcdn.net%2Fnewman%2Fgfx%2Fnews%2Fhires%2F2017%2Fthis2015usco.jpg&cfs=1&upscale=1&fallback=news_d_placeholder_publisher&_nc_hash=AQA0jILjoOa-blL-" style="border: 0px; height: 261.109px; min-height: initial; position: relative; top: 0px; vertical-align: bottom; width: 500px;" width="500" /></a></span></div>
</div>
<span class="_3m6-" style="font-family: inherit;"><a data-lynx-mode="asynclazy" data-lynx-uri="https://l.facebook.com/l.php?u=https%3A%2F%2Fphys.org%2Fnews%2F2017-07-polar-icebreakers-critical.html&h=AT21tCfsJu4eXRnMO2rlCtT5crcxAJDyfdKpo68KLb0nqZdpXQhKpPhYnEoUGrNw42qoekN8SvBx6AL_VOf0KT5PF4gYE-KZTujMCDl1M2pDzVlMS8bjA5rCzIZr" href="https://phys.org/news/2017-07-polar-icebreakers-critical.html" rel="noopener nofollow" style="color: #365899; cursor: pointer; font-family: inherit; text-decoration-line: none;" tabindex="-1" target="_blank">
</a></span></div>
<div class="_34js _1kaa _34jv" data-ft="{"tn":"-T"}" data-hover="tooltip" data-tooltip-alignh="right" data-tooltip-content="Show more information about this article" id="u_fetchstream_2_13" style="border-radius: 14px; bottom: -14px; box-sizing: border-box; color: #1c1e21; font-family: inherit; height: 28px; left: 12px; overflow: hidden; pointer-events: none; position: absolute; right: 12px; top: auto; z-index: 12;">
<div class="_34jx _2cpc _34ju" style="backface-visibility: hidden; background: rgb(255, 255, 255); border-radius: 14px; box-sizing: border-box; display: inline-block; font-family: inherit; height: 28px; left: 476px; max-width: 100%; pointer-events: none; position: absolute; top: 0px; transform: translate3d(-28px, 0px, 0px); white-space: nowrap; z-index: 1;">
<div class="_34k0" style="display: inline-block; font-family: inherit; height: 28px; left: 0px; position: absolute; top: 0px; vertical-align: top; width: 28px;">
<span class="_3m6-" style="font-family: inherit;"><i class="_34k2" style="background-image: url("/rsrc.php/v3/yu/r/3xUg_bK_lQy.png"); background-position: 0px -68px; background-repeat: no-repeat; background-size: auto; height: 16px; left: 14px; margin: -8px 0px 0px -8px; position: absolute; top: 14px; width: 16px;"></i></span></div>
<div class="_34k3" style="box-sizing: border-box; display: inline-block; font-family: inherit; height: 28px; line-height: 28px; max-width: 100%; opacity: 0; overflow: hidden; padding: 0px 12px 0px 28px; text-overflow: ellipsis; vertical-align: top;">
<span class="_3m6-" style="font-family: inherit;">About this article</span></div>
<span class="_3m6-" style="font-family: inherit;"><a ajaxify="/feed/article_context/dialog/?share_id=10155829668259423&entry_type=news_feed_learn_more&trigger_log_id=23135824-6e29-16c0-874c-70933a3a9432&ft_msg=qid.6586374526256049259%3Amf_story_key.-5431856163788743023%3Atop_level_post_id.10155829668254423%3Asrc.10" class="_34k6" href="https://www.facebook.com/#" id="u_fetchstream_2_14" rel="dialog-post" role="button" style="border-radius: 14px; bottom: 0px; color: #365899; cursor: pointer; font-family: inherit; left: 0px; max-width: 28px; min-width: 28px; pointer-events: auto; position: absolute; right: 0px; text-decoration-line: none; top: 0px;"></a></span></div>
<div class="_34jw" style="border-color: rgb(216, 216, 216); border-image: initial; border-radius: 0px 14px 14px 0px; border-style: solid; border-width: 1px 1px 1px 0px; bottom: 0px; font-family: inherit; pointer-events: none; position: absolute; right: 0px; top: 0px; width: 14px; z-index: 2;">
</div>
</div>
</div>
<span class="_3m6-" style="font-family: inherit;">
<div class="_3ekx _29_4" style="border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-bottom: 1px solid rgb(221, 223, 226); border-left: none; border-right: none; border-top-right-radius: 0px; font-family: inherit; margin: 0px; padding: 10px 12px; position: relative;">
<div class="_6m3 _--6" style="color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 12px; height: auto; margin: 0px; max-height: 190px; position: relative;">
<div class="_59tj _2iau" style="color: #606770; font-family: inherit; line-height: 16px; padding: 0px; position: relative; text-transform: uppercase;">
<div style="font-family: inherit;">
<div class="_6lz _6mb _1t62 ellipsis" style="font-family: inherit; line-height: 11px; overflow: hidden; padding: 0px; text-overflow: ellipsis; white-space: nowrap;">
PHYS.ORG</div>
<div class="" style="font-family: inherit;">
</div>
</div>
</div>
<div class="_3n1k" style="font-family: inherit; max-height: 46px; overflow: hidden;">
<div class="mbs _6m6 _2cnj _5s6c" style="-webkit-box-orient: vertical; -webkit-line-clamp: 2; display: -webkit-box; font-family: inherit; font-size: 16px; font-weight: 600; line-height: 20px; margin: 5px 0px 0px; max-height: 110px; overflow: hidden; text-overflow: ellipsis; transition: color 0.1s ease-in-out 0s; word-wrap: break-word;">
<a data-lynx-mode="asynclazy" href="https://l.facebook.com/l.php?u=https%3A%2F%2Fphys.org%2Fnews%2F2017-07-polar-icebreakers-critical.html&h=AT2XW6JyfKTauZdyt23TNM80YXMuWXZJ_cT8E7ai5MmkdQJIjY-74dGG6bH8EQR6C7mwJ1AK99E3HrPU6aDYMoMazM34xsHjLt5ZDkMgMlJNeWJ8nEq8oq6FmsD0" rel="noopener nofollow" style="color: #1d2129; cursor: pointer; font-family: inherit; text-decoration-line: none; transition: color 0.1s ease-in-out 0s;" target="_blank">US need for four polar icebreakers 'critical,' warns report</a></div>
<div class="_6m7 _3bt9" style="-webkit-box-orient: vertical; -webkit-line-clamp: 1; color: #606770; display: -webkit-box; font-family: inherit; font-size: 14px; line-height: 20px; margin-top: 3px; max-height: 80px; overflow: hidden; text-overflow: ellipsis; word-break: break-word;">
The rapid pace of global warming and ice melting at the poles have underscored the "critical" need for the United States to build four new polar icebreaker ships, US officials said Tuesday.</div>
<div>
<br /></div>
</div>
</div>
</div>
</span></div>
</div>
</div>
</div>
</div>
</div>
It would be very sad to see our Antarctica Scientific investment be lost due to the loss of this ice breaker. However I think there are other things to think about before we bash Trump for this problem.<br />
First of all, providing for the common defense, as is stated in the preamble of our constitution is one of the primary reasons to have government. A border wall is a project well within this goal and is thus an appropriate project for federal funding. Providing for scientific advancement could also be deemed as furthering the common defense but it is unlikely that Antarctica research will contribute much to defense technology.<br />
Something that many Americans seem to be oblivious to is the fact that every dime extracted by taxes to pay for projects funded by the federal government are taken at gun-point. Any funding of projects that are not authorized by the constitution is an outright theft. This is so common now-a-days that people see it as some kind of right that the government and voters have. They forget that all power the government has was granted to it by The People, which our unique constitution recognizes as the only lawful source of authority in a non-theocratic government.<br />
At the end of the life of a democracy, it's collapse always happens when the majority realizes they can vote for anything and steal it from the collective whole without any seeming consequences. Eventually there are simply not enough producers to feed the greedy majority and the system collapses economically and usually with much violence in the streets.<br />
Our economy is failing for several reasons. A fiat money system owned by a private corporation, a great burden of arbitrary regulation well outside of the legal limits allowed by our constitution, and a very poor educational system that has produced a generation of feel-good know-nothings that lack the common sense necessary to sustain this economy.<br />
The average American has never read or understood the concepts behind our constitutional republic, nor have they probably ever read the Federalist or Anti-Federalist papers which explains why we have what we have.<br />
Without this basis of understanding we find many many people simply parroting the latest memes touted by the Mainstream Media as fact and true without question.<br />
Another point on the ice-breaker issue is that government funding of research tends to skew it in the direction of whatever beliefs or policies are in place. Scientists are not free to explore what seems most promising but rather what is most fund-able. Grant writing is probably the most important skill for a scientist these days that wishes to pursue her chosen area of research. Picking a research project that bucks the idea of global warming, for example, will have a very hard time getting funding. This is a disservice to those paying the research bills - the US Taxpayer.<br />
Another point is that the media is commonly used when funding is needed for a particular endeavor. Ever notice how NASA seems to have a breakthrough in finding life on other planets just at the time congress is voting on its budget? Ever notice how these great breakthroughs turn out to be nothing after the funding is obtained?<br />
How critical really is this ice-breaker? It would be real nice to have $750M given to get a new one. Seems the rich can't get together and make it happen, no lets steal from the poor instead... ever think about that angle? It isn't just "evil corporations" that steal from people. (and they don't steal it. They provide a product or service people are willing to pay for.) We throw a fit when corporations get a tax break but don't realize that every dime that they are taxed simply is passed on to the customer. The price of a service or commodity is set by the market and the entire marked is adversely affected by both taxes and regulations.<br />
Now I am not arguing that the wall Trump is building is necessarily the right thing to do, but it certainly falls within his job description and it is a project he promised to do on the campaign trail. He was duly and lawfully elected to do what he promised and amazingly enough, he seems to be keeping his promises.<br />
How does the executive branch "move" funding from one project to another when congress has full control of the purse strings? Clearly, if the executive branch can do such things, congress is not doing its job to stop this. Let's at least point the "little finger" in the right direction.</div>
Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0tag:blogger.com,1999:blog-8768144104280624268.post-64995630530042484892018-07-10T12:10:00.001-07:002018-07-10T12:18:19.007-07:00Why AirBnB SUCKS<div dir="ltr" style="text-align: left;" trbidi="on">
This is unbelievable. <a href="https://www.airbnb.com/" target="_blank">Airbnb</a> has a terrible website when used by someone in my niche situation. My big handicap is that I do not want to have or use a smartphone, yet it is IMPOSSIBLE as a host to use them without one.<br />
When I got my first customer after several months of having been signed up as a host on this site, I received a rather cryptic text message that said someone wanted to stay at my place for two whole months (a $12,000 value). Yet when I tried to log in I found my account had been hacked by someone and my name and profile photo was someone from India. I can't imagine why anyone would hack an AirBnB host account but they did.<br />
I spent hours trying to contact a person at AirBnB and could not do so. After hours of searching I finally found a phone number burred DEEP within their help system. (BTW its 844-424-7262)<br />
I needed to talk to a person because once I reset my password and tried to regain access to my account, I found that they had added a required photo method to verify my identity. Unfortunately, they would only allow me to upload the photo via a smartphone. Never mind the fact that I could take a reasonable picture of someone, hold it in front of the phone and take a picture. The fact that I could not upload an image from my computer made it impossible for me to get back into my account. I finally had to borrow someone elses phone to accomplish this step. LAME-O-Tech<br />
By the time this was done, my customer had been lost.<br />
<br />
The cryptic url you get from AirBnB in your phone text message includes 0s and Os which can be very confusing. I had to try 4 variations to get the right URL and the one that appeared right said "You are not authorized to view this message". Well that helps a lot.<br />
What was also weird was that when I went to my account online there was absolutely no evidence that I had any customers interested in my place. The support person could not explain or correct this either.<br />
The call center guy also had to admit, I cannot use their system without a smartphone.<br />
I will send them a link to this article as feedback to their system and hope maybe somebody there will be able to make changes so I and others like me can use their services.<br />
<br />
AirBnB seems to run their company like US Worst/Verizon does. An impossible maze of attempts to thwart people from asking intelligent questions and getting real help.<br />
<br />
As a test, on <a href="https://www.airbnb.com/help" target="_blank">their help page</a> I tried searching for "How do I ask a question" - no relevant answers were found.<br />
<br />
Specific fixes they could do:<br />
1) Forget photo verification via cell phone. It doesn't prove anything, and it can easily be thwarted. Either let people upload an image or get rid of this ridiculous method of user verification. Better to get them to sign in with facebook - at least then you have a face recognition algorithm working for you.<br />
<br />
2) for shortcut URLs don't use 0s or Os - just use lowercase letters - its not a password so keep it simple for users to type in if necessary. In fact, I would implement it so that words from a simple dictionary are used. Imagine how simple it would be to type in https://www.airbnb.me/lovelyflowerstogether.<br />
<br />
3) Put your support number on the root help page. Don't pretend to be happy to help me if you hide your number. Better, add chat support or true email support or some kind of ticket system. It works and things don't get lost. Maybe your customer is like me and lives way out where there is little or no cell coverage - ever think of that? Let people really talk to you using an efficient system via multiple channels. I can understand the cost of personal support but with a good chat-bot you may be able to still answer most questions in an automated fashion. Hiding your support or making it hard for people to talk to you just cuts you off from you customers and pisses them off.<br />
<br />
If I see no progress in fixing this so I can use it, I will simply have to shut down my account and go elsewhere. Don't do this guys! I want to use you if I can!<br />
<br />
Note that I have a general problem with all these "middle man" rental listing websites. A host can only manage so many middle-men and besides loosing profit on their rentals, every site is different and there is simply no way to support all the possible ways a person might offer or manage his rental. A small fee to allow the listing to simply contain a link to the renter's website would be wonderful and I would gladly pay a reasonable fee for the listing.<br />
If this isn't done soon, I bet a craigs-list kind of rental website will become a defacto winner and eventually dethrone all of you "middle-men".<br />
<br />
<br /></div>
Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0tag:blogger.com,1999:blog-8768144104280624268.post-24026347398215767432017-09-27T11:00:00.001-07:002017-09-27T11:05:18.929-07:00How Bitcoin Makes Wealth<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyC2dvsyzghsU-Kw-LStd5YJCO6B1oUM_5VNaZquTCZHEQee6AsXj5GO0_hXDQnPFTn2bxBal7SN6fdQRwDp3tl5bKC0Xe52L21Sn8VvwCI15y-6OTwAjAqt_IxxlCbfQE2plbG63s4viM/s1600/How+Bitcoin+and+Justice+Make+Wealth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="674" data-original-width="839" height="257" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyC2dvsyzghsU-Kw-LStd5YJCO6B1oUM_5VNaZquTCZHEQee6AsXj5GO0_hXDQnPFTn2bxBal7SN6fdQRwDp3tl5bKC0Xe52L21Sn8VvwCI15y-6OTwAjAqt_IxxlCbfQE2plbG63s4viM/s320/How+Bitcoin+and+Justice+Make+Wealth.png" width="320" /></a></div>
I have recently been getting into bitcoin and all that entails. The big thing about bitcoin is that it replaces or enforces trust. Trust is key to all society and is the root force that creates an economy and wealth. These days, trust is lacking everywhere - I should know - I have lost my fortune due to people I trusted letting me down.<br />
Criminals use trust to gain access to wealth to steal it from others. Unfortunately these days we also have rampant crimes in high places causing rip-offs on a unprecedented scale (bank bailouts come to mind). Our fiat money systems that run the world are all based on trust and the debt they create due to breach of that trust is causing a near collapse of the global economy.<br />
Naturally people are running to crypto-currencies to protect themselves from the impending crash.<br />
<br />
Why is trust so important?<br />
<br />
Trust creates relationships and good relationships promote not only more trust but economic efficiency. Few people realize that much of the worlds economy is held together by huge trust relationships. We get our gas, our water, and many other services from large systems of trust that often span the globe. If trust breaks down, relationships dissolve and economic efficiency falls. Mankind can do nothing without trusting someone else - we simply can't survive as an isolated individual.<br />
<br />
If you are seeing wealth disappear, odds are very good that trust is breaking down and relationships are suffering.<br />
<br />
Here are some other related ideas I wanted to share with you:<br />
<br />
<ul style="text-align: left;">
<li>Justice promotes integrity and trust. Lack of justice creates lack of trust.</li>
<li>Integrity is a track record of unbroken trust and promotes more trust.</li>
<li>Wealth is created by people working together.</li>
<li>Better relationships and more trust promote economic efficiency and thus create more wealth.</li>
<li>Wealthy people have more to give and giving to the poor promotes equality.</li>
<li>Wealthy people have more they can afford to lose and thus they have less risk or can afford to take greater risks.</li>
<li>Less risk also promotes integrity, trust and investment and thus promotes wealth.</li>
</ul>
<div>
This is why bitcoin cannot be stopped. Our society desperately needs trust and blockchain systems provide the ability to contract with less trust. We still have some very difficult security issues to deal with in crypto-currency but if we can solve those issues I see a massive increase in wealth coming despite all the criminals running around these days. Governments (being a high class of criminal in nature) will oppose this but I don't think they can stop it. </div>
<div>
Blockchain systems may in fact be the impetus to drive us into the millennium - a time of great peace and prosperity and wealth.</div>
<div>
Now if we just didn't have that problem with the mark of the beast...</div>
</div>
Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0tag:blogger.com,1999:blog-8768144104280624268.post-87425896135168211362017-01-24T05:07:00.000-08:002017-01-24T05:07:04.284-08:00Javascript Objects - The Truth<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://images.duckduckgo.com/iu/?u=http%3A%2F%2Fblogbackend.scriptcase.net%2Fwp-content%2Fuploads%2F2016%2F02%2FObjects-in-Javascript.jpg&f=1" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://images.duckduckgo.com/iu/?u=http%3A%2F%2Fblogbackend.scriptcase.net%2Fwp-content%2Fuploads%2F2016%2F02%2FObjects-in-Javascript.jpg&f=1" width="320" /></a></div>
<br />
After building a project that attempted to use an object oriented way with Javascript I found that the rules of prototyping in Javascript were very confusing. After reading several articles that weren't really helping I found one that mentioned all the "rubbish" in articles he had read. That led me to an experiment to get to the truth of the matter - code!<br />
So here is the code. Run this, observe its assumptions, and I think you will soon be on your way to really understanding Javascript objects, inheritance and prototypes.<br />
<div style="background-color: white; font-family: "Courier New"; font-size: 10pt;">
<pre><span style="color: maroon;"><</span><span style="color: purple;">!doctype</span> html<span style="color: maroon;">></span>
<span style="color: maroon;"><</span><span style="color: purple;">html</span> lang<span style="color: maroon;">=</span><span style="color: teal;">"en"</span><span style="color: maroon;">></span>
<span style="color: maroon;"><</span><span style="color: purple;">head</span><span style="color: maroon;">></span>
<span style="color: maroon;"><</span><span style="color: purple;">meta</span> charset<span style="color: maroon;">=</span><span style="color: teal;">"UTF-8"</span><span style="color: maroon;">></span>
<span style="color: maroon;"><</span><span style="color: purple;">title</span><span style="color: maroon;">></span>Object Test for Browsers<span style="color: maroon;"><</span><span style="color: purple;">/title</span><span style="color: maroon;">></span>
<span style="color: maroon;"><</span><span style="color: purple;">style</span> type<span style="color: maroon;">=</span><span style="color: teal;">"text/css"</span><span style="color: maroon;">></span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">body</span><span style="background-color: #d8d8d8;"> {</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">text-align</span><span style="background-color: #d8d8d8;">:</span><span style="background-color: #d8d8d8;">center</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> }</span>
<span style="color: maroon;"><</span><span style="color: purple;">/style</span><span style="color: maroon;">></span>
<span style="color: maroon;"><</span><span style="color: purple;">script</span> type<span style="color: maroon;">=</span><span style="color: teal;">"text/javascript"</span><span style="color: maroon;">></span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;">/*</span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;"> objectTest.html</span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;">*/</span>
<span style="background-color: #d8d8d8; color: purple;">Object</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">prototype</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">deepCopyValues</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">function</span><span style="background-color: #d8d8d8;">() </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: green; font-style: italic;">// returns a deep copy of this without function memebers - quicker</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">JSON</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8; color: purple;">parse</span><span style="background-color: #d8d8d8;">(</span><span style="background-color: #d8d8d8;">JSON</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8; font-weight: bolder;">stringify</span><span style="background-color: #d8d8d8;">(</span><span style="background-color: #d8d8d8; color: purple;">this</span><span style="background-color: #d8d8d8;">))</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8; color: purple;">Object</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">prototype</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">deepCopy</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">function</span><span style="background-color: #d8d8d8;">() </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: green; font-style: italic;">// returns a deep copy of this</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">function</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">deepCopyFunctions</span><span style="background-color: #d8d8d8;">(</span><span style="background-color: #d8d8d8;">org</span><span style="background-color: #d8d8d8;">, </span><span style="background-color: #d8d8d8;">copy</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">org</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">==</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">null</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">null</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">var</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">keys</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">Object</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8; font-weight: bolder;">keys</span><span style="background-color: #d8d8d8;">(</span><span style="background-color: #d8d8d8;">org</span><span style="background-color: #d8d8d8;">)</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">for</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8; color: purple;">var</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">i</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: navy;">0</span><span style="background-color: #d8d8d8;">;</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">i</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;"><</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">keys</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">length</span><span style="background-color: #d8d8d8;">;</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">i</span><span style="background-color: #d8d8d8;">++</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">var</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">key</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">keys</span><span style="background-color: #d8d8d8;">[</span><span style="background-color: #d8d8d8;">i</span><span style="background-color: #d8d8d8;">]</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">var</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">org</span><span style="background-color: #d8d8d8;">[</span><span style="background-color: #d8d8d8;">key</span><span style="background-color: #d8d8d8;">]</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8; color: purple;">typeof</span><span style="background-color: #d8d8d8;">(</span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8;">==</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'function'</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">copy</span><span style="background-color: #d8d8d8;">[</span><span style="background-color: #d8d8d8;">key</span><span style="background-color: #d8d8d8;">] </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">else</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8; color: purple;">typeof</span><span style="background-color: #d8d8d8;">(</span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8;">==</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'object'</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">copy</span><span style="background-color: #d8d8d8;">[</span><span style="background-color: #d8d8d8;">key</span><span style="background-color: #d8d8d8;">] </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">deepCopyFunctions</span><span style="background-color: #d8d8d8;">(</span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;">, </span><span style="background-color: #d8d8d8;">copy</span><span style="background-color: #d8d8d8;">[</span><span style="background-color: #d8d8d8;">key</span><span style="background-color: #d8d8d8;">])</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">copy</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">var</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">copy</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">this</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8; font-weight: bolder;">deepCopyValues</span><span style="background-color: #d8d8d8;">()</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">deepCopyFunctions</span><span style="background-color: #d8d8d8;">(</span><span style="background-color: #d8d8d8; color: purple;">this</span><span style="background-color: #d8d8d8;">, </span><span style="background-color: #d8d8d8;">copy</span><span style="background-color: #d8d8d8;">)</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8; color: purple;">function</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">run</span><span style="background-color: #d8d8d8;">() </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">var</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">a</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">:</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: navy;">1</span><span style="background-color: #d8d8d8;">,</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">d</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">:</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'string'</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">var</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o2</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8; font-weight: bolder;">deepCopy</span><span style="background-color: #d8d8d8;">()</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">var</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o3</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">!==</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o3</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'An object is equal to (===) a reference of itself'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">===</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o2</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'An object is not equal to (!==) a deep copy of itself'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">==</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o2</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'An object is not equal to (!=) a deep copy of itself'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">a</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: navy;">2</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">o2</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">a</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">==</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: navy;">2</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'Changing a member of an object does not affect a deep copy of itself'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o3</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">{</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">a</span><span style="background-color: #d8d8d8;">:</span><span style="background-color: #d8d8d8; color: navy;">5</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">a</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">==</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: navy;">5</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'Changing an object reference to a different object does not change the original object.'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">__proto__</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">!=</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8; color: maroon;">{}</span><span style="background-color: #d8d8d8;">).</span><span style="background-color: #d8d8d8;">__proto__</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'An object that is not created with new has an empty prototype.'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">o2</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">__proto__</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">!=</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8; color: maroon;">{}</span><span style="background-color: #d8d8d8;">).</span><span style="background-color: #d8d8d8;">__proto__</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'A deep copy of an object not created with new has a null prototype.'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">function</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">fnConstructorA</span><span style="background-color: #d8d8d8;">()</span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">this</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">a</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: navy;">1</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">this</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">d</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'string'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">try</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">fnConstructorA</span><span style="background-color: #d8d8d8;">()</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">catch</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">e</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">e</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">message</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">!=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'Cannot set property \'a\' of undefined'</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">&&</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: green; font-style: italic;">// Chrome</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">e</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">message</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">!=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'this is undefined'</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: green; font-style: italic;">// Firefox</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: green; font-style: italic;">//debugger;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'Calling a proper constructor without new makes the \'this\' variable in the constructor undefined. message='</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">+</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">e</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">message</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">var</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">A</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">new</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">fnConstructorA</span><span style="background-color: #d8d8d8;">()</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">var</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">A2</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">A</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8; font-weight: bolder;">deepCopy</span><span style="background-color: #d8d8d8;">()</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">var</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">A3</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">A</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> ((</span><span style="background-color: #d8d8d8;">A</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">__proto__</span><span style="background-color: #d8d8d8;">).</span><span style="background-color: #d8d8d8;">__proto__</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">!==</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8; color: maroon;">{}</span><span style="background-color: #d8d8d8;">).</span><span style="background-color: #d8d8d8;">__proto__</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'A new created object who\'s constructor has no prototype has the default Object prototype.'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">A</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">constructor</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">!==</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">fnConstructorA</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'a new created object\'s constructor is the function that created the object.'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">A</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">!==</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">A3</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'An new created object is equal (===) to a reference of itself'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">A</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">===</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">A2</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'A new created object is not equal (===) to a copy of itself'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">A</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">!=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">A3</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'An new created object is equal (==) to a reference of itself'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">A</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">==</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">A2</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'A new created object is not equal (!=) to a copy of itself'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">function</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">fConstructorB</span><span style="background-color: #d8d8d8;">(</span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: green; font-style: italic;">// like Object.create()</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">this</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">__proto__</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">this</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">a</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: navy;">5</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">this</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">data</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'that string'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">var</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">B</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">new</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">fConstructorB</span><span style="background-color: #d8d8d8;">(</span><span style="background-color: #d8d8d8;">A</span><span style="background-color: #d8d8d8;">)</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">B</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">__proto__</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">!==</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">A</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'A proper Object.create() call yields an object with a prototype that equals the object given to the function.'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">B</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">a</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">==</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">A</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">a</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'Values in a child object overshadow the same value in its prototype.'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">B</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">d</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">!=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'string'</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'Values in a prototype are visible from a child object if that value is not defined in the parent object.'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">B</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">a</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: navy;">14</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">B</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">a</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">!=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: navy;">14</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'A value in a child object can be changed.'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">A</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">a</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">!=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: navy;">1</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'A value in a prototype of an object is not affected if a vaule in a child object is changed.'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">B</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">__proto__</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">e</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'new string'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">B</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">e</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">!=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'new string'</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'Changing a prototype\'s value within a child object affects the child objects same value if not defined in the child object.'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">A</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">f</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'proto changed'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">var</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">C</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">new</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">fConstructorB</span><span style="background-color: #d8d8d8;">(</span><span style="background-color: #d8d8d8;">A</span><span style="background-color: #d8d8d8;">)</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">B</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">f</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">!=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'proto changed'</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'Changing a prototype object value affects any child objects of it that don\'t have that value defined.'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">C</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">f</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">!=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'proto changed'</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">debugger</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'Changing a prototype object value affects any child objects of it that don\'t have that value defined.'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'SUCCESS!!!!'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8; color: purple;">function</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">runTests</span><span style="background-color: #d8d8d8;">() </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">var</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">str</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">run</span><span style="background-color: #d8d8d8;">()</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">document</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">body</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">innerHTML</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">str</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="color: maroon;"><</span><span style="color: purple;">/script</span><span style="color: maroon;">></span>
<span style="color: maroon;"><</span><span style="color: purple;">/head</span><span style="color: maroon;">></span>
<span style="color: maroon;"><</span><span style="color: purple;">body</span> onload<span style="color: maroon;">=</span><span style="color: teal;">"runTests();"</span><span style="color: maroon;">></span>
Testing...
<span style="color: maroon;"><</span><span style="color: purple;">/body</span><span style="color: maroon;">></span>
<span style="color: maroon;"><</span><span style="color: purple;">/html</span><span style="color: maroon;">></span></pre>
</div>
</div>
Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0tag:blogger.com,1999:blog-8768144104280624268.post-51368205491444905262016-07-06T19:01:00.000-07:002016-07-06T19:01:21.578-07:002016 Lameotech Award<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: center;">
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.kenrockwell.com/nikon/d5200/1200.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://www.kenrockwell.com/nikon/d5200/1200.jpg" height="287" width="320" /></a></div>
<span style="font-size: large;"><b><br /></b></span>
<span style="font-size: large;"><b>2016 Techno Dweeb <span style="color: #cc0000;">Lameotech Award</span> goes to...</b></span></div>
<div style="text-align: center;">
<b><span style="font-size: x-large;">The Nikon D5200</span></b></div>
<div style="text-align: center;">
<span style="font-family: "verdana" , sans-serif; font-size: large;"><br /></span></div>
<div style="text-align: center;">
<span style="font-family: "verdana" , sans-serif; font-size: large;">The first camera I have ever owned that does NOT charge the battery when attached via USB to your PC. Leave it on, and your battery will go completely dead. Forget your charger when you travel - You're out of luck dude!</span></div>
</div>
Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0tag:blogger.com,1999:blog-8768144104280624268.post-81507350502073640912016-05-16T19:54:00.000-07:002016-05-16T19:54:55.156-07:00I've just about had it with Windows<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://images.duckduckgo.com/iu/?u=http%3A%2F%2Fwww.yourlogoresources.com%2Fwp-content%2Fuploads%2F2011%2F11%2FMicrosoft-Windows-Logo.png&f=1" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="218" src="https://images.duckduckgo.com/iu/?u=http%3A%2F%2Fwww.yourlogoresources.com%2Fwp-content%2Fuploads%2F2011%2F11%2FMicrosoft-Windows-Logo.png&f=1" width="320" /></a></div>
I live far out of town in rural Idaho so I get pretty lame satellite internet service. I am used to things working slow but lately, ever since the Windows 10 drive, my browsing experience has gotten so bad as to begin to be unusable. Checking email on Chrome via live.com is so bad that sometimes when I am responding to or composing an email, I have to wait for individual keystrokes to complete in the composition window. I know windows uses .ASP technology for its live.com site but does it actually have to go clear to the server for each keystroke?<br />
To determine the problem I decided to switch browsers to Firefox and Explorer both were moderately better but still very slow. So my next step was to boot up on a Linux Mint CD and see how my browsing on live.com worked from that OS - massive difference! Probably 5-10x faster on Linux with Firefox.<br />
While trying to figure out what was wrong with my system I did a deep scan using Windows Defender which took well over 24 hours to accomplish and found no problems. My system has a nice SSD drive with defragging software in place and plenty of RAM and disk space.<br />
I suspect a chrome virus using script injection on my youtube.com pages which frequently freezes up and is nearly unusable but have not found anything that finds a problem. Looking on the Chrome debugger I see tons of scripts from all over the map but it too will lock up and prevent me from further investigation.<br />
I used to work with an old 8080 2MHZ single processor 64k 87-bit RAM system I built back in the 70s and it was much faster than my Dual Proc Intel 2.13GHZ processor with 2GB of RAM, 64 bit OS and windows - even when simply using a text editor to code on Windows with no internet useage!<br />
Looking at Task Manager revealed at times Windows Update pegging the hard drive with IO doing some kind of background install that just slowed my system to an unusable crawl. I wondered if it wasn't pre-installing Windows 10 for me in the background.<br />
So basically, my very powerful PC is more controlled by advertisers and viruses and Microsoft than it is by me. It is clearly using a minuscule percentage of CPU power to do what I want it to do with the lion's share devoted to under-the-cover ops I have no clue about and no control over (without writing a post-graduate CS dissertation in the process). Is it spying on me? It is reporting my every keystroke to someone? Is there a root kit in there doing tons of stuff I can't even see? Why should the keyboard respond so slowly yet Task Manager say the CPU is idle 98% of the time?<br />
Linux boots incredibly fast, and runs much faster, even when loading form a single CD. It clearly shows me how much I am being robbed by corporate America.<br />
So as a last effort to give Windows one more chance I decided to start downloading Windows 10 - I've been supposedly doing that for the last 4 hours but the resource monitor shows absolutely no internet activity as the windows spinning wheel goes round and round telling me it is downloading windows. As I write this I am accessing the internet at the same time no problem.<br />
Must be a bug.<br />
I am very close to making the painful transition to Linux and chucking the OS I helped write into the waste basket - forcing me to abandon programs I have used for years like MSN Money and Free Cell and start completely over learning a new system. Maybe Wine is good enough on Linux now to make the transition easier.<br />
I hate to waste the time but Windows has become so bad I can hardly read email or watch youtube or enjoy facebook. Personal computing should not be this way and this isn't the vision I worked so hard on at Microsoft for 20 years.</div>
Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0tag:blogger.com,1999:blog-8768144104280624268.post-19165259635971792692016-03-01T09:54:00.002-08:002016-03-01T10:07:29.932-08:00A possible way out of promise hell<div dir="ltr" style="text-align: left;" trbidi="on">
I recently have been getting into promises (ie: nodejs, javascript type promises - see the <a href="https://promisesaplus.com/" target="_blank">Promise/A+ spec.</a>)<br />
I was reading several articles on this beast and found an exceptionally helpful one in the post entitled "We have a problem with promises" <a href="http://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html" target="_blank">here</a>.<br />
Something told me that this could be explained better.<br />
I believe I have found one possible better explanation.<br />
<br />
The confusing thing about promises isn't the syntax but the very important side effects of each function involved. What a function returns or does effects a promise dramatically. This is because promises work entirely by side effects.<br />
If we make the types clear, the code becomes much more understandable I think.<br />
<br />
So lets set up some hungarian-like conventions for naming our functions and parameters and return values:<br />
<pre style="background-color: #3f3f3f; border-radius: 4px; border: none; box-sizing: border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow: auto; padding: 9.5px 15px; word-break: break-all; word-wrap: break-word;"><span style="color: white;">
</span><div style="background-color: white; font-family: 'Courier New'; font-size: 10pt;">
<pre style="color: black;"><span style="color: green;">Type Prefixes:</span>
<span style="color: green;"><b>p_ </b> a promise</span>
<span style="color: green;"><b>pfn</b>_ a function that returns a promise (a promise generator)</span>
<span style="color: green;"><b>fn_</b> a function that does not return a value</span>
<span style="color: green;"><b>cbfn_</b> a commonJS callback that takes (fn_err, fn_success)</span></pre>
<pre style="color: black;"><span style="color: #38761d;"><b>apcbfn_</b> an <b>a</b>synchronous <b>p</b>romise <b>c</b>all<b>b</b>ack <b>f</b>unctio<b>n</b> that takes (fn_resolve, fn_reject).
<span style="color: green;"><b>v_</b> a value (not a promise or a function)</span>
<span style="color: green;"><b>vfn_</b> a function that returns a non-promise, non-function value</span>
<span style="color: green;"><b>tfn_</b> a function that may throw an error</span>
<span style="color: green;"><b>afn_</b> an asynchronous function that does not take a cbfn_ (does not return and throws are lost).</span>
<span style="color: green;"><b>ajsfn_</b> an asynchronous commonJS function that takes a cbfn_ function (does not return and throws are lost).</span>
<span style="color: green;"><b>resolve -</b> a function that is called when a promise is successfully resolved with the value of the promise. Whatever value it returns becomes the value of the promise that called it.</span>
<span style="color: green;"><b>reject -</b> a function that is called when a promise fails to accomplish its purpose and is called with an error value. Its return value (if any) is ignored by the promise that called it.</span></span></pre>
<pre><span style="color: green;">Combine these to say that the value or function may be any of the types specified (if you want to get complicated).</span></pre>
</div>
<span style="color: white;">
</span></pre>
In the "We have a problem with promises" post the author gives a little quiz of code for the reader to understand:<br />
<pre style="background-color: #3f3f3f; border-radius: 4px; border: none; box-sizing: border-box; color: white; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow: auto; padding: 9.5px 15px; word-break: break-all; word-wrap: break-word;"><code class="language-js" data-lang="js" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: inherit; padding: 0px; white-space: pre-wrap;"><span class="nx" style="box-sizing: border-box; color: #6eca97;">doSomething</span><span class="p" style="box-sizing: border-box; color: #f8f8f2;">().</span><span class="nx" style="box-sizing: border-box; color: #6eca97;">then</span><span class="p" style="box-sizing: border-box; color: #f8f8f2;">(</span><span class="kd" style="box-sizing: border-box; color: #66d9ef;">function</span> <span class="p" style="box-sizing: border-box; color: #f8f8f2;">()</span> <span class="p" style="box-sizing: border-box; color: #f8f8f2;">{</span>
<span class="k" style="box-sizing: border-box; color: #66d9ef;">return</span> <span class="nx" style="box-sizing: border-box; color: #6eca97;">doSomethingElse</span><span class="p" style="box-sizing: border-box; color: #f8f8f2;">();</span>
<span class="p" style="box-sizing: border-box; color: #f8f8f2;">});</span>
<span class="nx" style="box-sizing: border-box; color: #6eca97;">doSomething</span><span class="p" style="box-sizing: border-box; color: #f8f8f2;">().</span><span class="nx" style="box-sizing: border-box; color: #6eca97;">then</span><span class="p" style="box-sizing: border-box; color: #f8f8f2;">(</span><span class="kd" style="box-sizing: border-box; color: #66d9ef;">function</span> <span class="p" style="box-sizing: border-box; color: #f8f8f2;">()</span> <span class="p" style="box-sizing: border-box; color: #f8f8f2;">{</span>
<span class="nx" style="box-sizing: border-box; color: #6eca97;">doSomethingElse</span><span class="p" style="box-sizing: border-box; color: #f8f8f2;">();</span>
<span class="p" style="box-sizing: border-box; color: #f8f8f2;">});</span>
<span class="nx" style="box-sizing: border-box; color: #6eca97;">doSomething</span><span class="p" style="box-sizing: border-box; color: #f8f8f2;">().</span><span class="nx" style="box-sizing: border-box; color: #6eca97;">then</span><span class="p" style="box-sizing: border-box; color: #f8f8f2;">(</span><span class="nx" style="box-sizing: border-box; color: #6eca97;">doSomethingElse</span><span class="p" style="box-sizing: border-box; color: #f8f8f2;">());</span>
<span class="nx" style="box-sizing: border-box; color: #6eca97;">doSomething</span><span class="p" style="box-sizing: border-box; color: #f8f8f2;">().</span><span class="nx" style="box-sizing: border-box; color: #6eca97;">then</span><span class="p" style="box-sizing: border-box; color: #f8f8f2;">(</span><span class="nx" style="box-sizing: border-box; color: #6eca97;">doSomethingElse</span><span class="p" style="box-sizing: border-box; color: #f8f8f2;">);</span></code></pre>
So lets look at the first one with type prefixes added for the cases we want to study.<br />
<pre style="background-color: #3f3f3f; border-radius: 4px; border: none; box-sizing: border-box; color: white; font-family: menlo, monaco, consolas, 'courier new', monospace; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow: auto; padding: 9.5px 15px; word-break: break-all; word-wrap: break-word;"><code class="language-js" data-lang="js" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; font-family: menlo, monaco, consolas, 'courier new', monospace; font-size: inherit; padding: 0px; white-space: pre-wrap;"><span class="nx" style="box-sizing: border-box; color: #6eca97;">pfn_doSomething</span><span class="p" style="box-sizing: border-box; color: #f8f8f2;">().</span><span class="nx" style="box-sizing: border-box; color: #6eca97;">then</span><span class="p" style="box-sizing: border-box; color: #f8f8f2;">(</span><span class="kd" style="box-sizing: border-box; color: #66d9ef;">function</span> <span style="background-color: transparent; color: #6eca97; font-size: inherit; line-height: 1.42857;">pfn_resolve</span><span class="p" style="background-color: transparent; box-sizing: border-box; color: #f8f8f2; font-size: inherit; line-height: 1.42857;">()</span><span style="background-color: transparent; font-size: inherit; line-height: 1.42857;"> </span><span class="p" style="background-color: transparent; box-sizing: border-box; color: #f8f8f2; font-size: inherit; line-height: 1.42857;">{</span>
<span class="k" style="box-sizing: border-box; color: #66d9ef;">return</span> <span style="background-color: transparent; color: #6eca97; font-size: inherit; line-height: 1.42857;">pfn_</span><span class="nx" style="background-color: transparent; box-sizing: border-box; color: #6eca97; font-size: inherit; line-height: 1.42857;">doSomethingElse</span><span class="p" style="background-color: transparent; box-sizing: border-box; color: #f8f8f2; font-size: inherit; line-height: 1.42857;">();</span>
<span class="p" style="box-sizing: border-box; color: #f8f8f2;">});</span></code></pre>
What's happening here has several possibilities depending on what each promise ends up doing.<br />
First lets recall how we create a promise:<br />
<pre style="background-color: #3f3f3f; border-radius: 4px; border: none; box-sizing: border-box; color: white; font-family: menlo, monaco, consolas, 'courier new', monospace; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow: auto; padding: 9.5px 15px; word-break: break-all; word-wrap: break-word;"><code class="language-js" data-lang="js" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; font-family: menlo, monaco, consolas, 'courier new', monospace; font-size: inherit; padding: 0px; white-space: pre-wrap;"><span class="nx" style="box-sizing: border-box; color: #6eca97;">var p_new = new Promise(apcbfn(pfn_vfn_resolve, fn_reject));</span></code></pre>
This is really the mother of all promise generators and once this line is run apcbfn() is instantly called.<br />
Realize that apcbfn() is an asynchronous function and thus will never return and any throws it may do will be lost because it runs in a different call stack - except that within a promise, those throws will be caught by a closure and result in a call to fn_reject. The only way this promise can be rejected or resolved is for one of it's callback functions to be called by the asynchronous function or for it to throw and exception. Note that if the apcbfn() never calls either of its callback functions and never throws an exception, the promise is powerless to ever be resolved or rejected.<br />
Once the promise is resolved (ie vfn_resolve() is called - if that is the case) its .then() function is called. If it is rejected, the .then() function is never called - but if the promise has a .catch() function - that will be called on rejection.<br />
Another thing to remember is that promises bubble up. That means that each .then() in a chain is actually a nesting of .then() functions with the result of the inner .then() being passed up the chain.<br />
This is because a resolved promise holds a value which can be returned from its resolve function. This is how promises can be nested - but the resolve function MUST return a value for this to work.<br />
<pre style="background-color: #3f3f3f; border-radius: 4px; border: none; box-sizing: border-box; color: white; font-family: menlo, monaco, consolas, 'courier new', monospace; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow: auto; padding: 9.5px 15px; word-break: break-all; word-wrap: break-word;"><code class="language-js" data-lang="js" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; font-family: menlo, monaco, consolas, 'courier new', monospace; font-size: inherit; padding: 0px; white-space: pre-wrap;"><span class="nx" style="box-sizing: border-box; color: #6eca97;">pfn_doSomething</span><span class="p" style="box-sizing: border-box; color: #f8f8f2;">().</span><span class="nx" style="box-sizing: border-box; color: #6eca97;">then</span><span class="p" style="box-sizing: border-box; color: #f8f8f2;">(</span><span class="kd" style="box-sizing: border-box; color: #66d9ef;">function</span> <span style="background-color: transparent; color: #6eca97; font-size: inherit; line-height: 1.42857;">fn_resolve</span><span class="p" style="background-color: transparent; box-sizing: border-box; color: #f8f8f2; font-size: inherit; line-height: 1.42857;">()</span><span style="background-color: transparent; font-size: inherit; line-height: 1.42857;"> </span><span class="p" style="background-color: transparent; box-sizing: border-box; color: #f8f8f2; font-size: inherit; line-height: 1.42857;">{</span>
<span class="k" style="box-sizing: border-box; color: #66d9ef;">return</span> <span style="background-color: transparent; color: #6eca97; font-size: inherit; line-height: 1.42857;">pfn_</span><span class="nx" style="background-color: transparent; box-sizing: border-box; color: #6eca97; font-size: inherit; line-height: 1.42857;">doSomethingElse</span><span class="p" style="background-color: transparent; box-sizing: border-box; color: #f8f8f2; font-size: inherit; line-height: 1.42857;">();</span>
<span class="p" style="box-sizing: border-box; color: #f8f8f2;">});</span></code></pre>
So above we have a function that returns a promise (pfn_doSomething). That function, once it creates the promise instantly starts running the promise's apcbfn() function which never returns but because it is inside a promise will have any exceptions caught and passed on to the promise's reject function and thus its .catch() function as well.<br />
The .then() function of pfn_doSomething() will be called only if that promise resolves successfully.<br />
pfn_doSomethingElse() is also a promise generator which is only called upon successful resolution of pfn_doSomething() and once it is called it's corresponding internal apcbfn() function is called - which never returns either but will eventually call its reject or resolve function. IF the resolve function returns a value, then the pfn_doSomethingElse() get's that value and returns it via fn_resolve() to pfn_doSomething() which will inherit that value internally but not call its fn_resolve() function because it already did before calling the .then() function and promises only call their fn_resolve() functions once by contract.<br />
The reason the quiz given in the "We have a problem with promises" post can be difficult is because we don't know the actual fn_resolve(), fn_reject() and internals of apcbfn() for all the promises mentioned. In fact, in the syntax of the original quiz, we don't even know what kind of functions the doSomething... functions are. Here I am assuming they are promise generators and note that explicitly with the prefixes but I also must assume that the apcbfn() functions don't throw errors and that the fn_resolve() functions return values and don't throw errors either.<br />
I think if a newbe to promises like me uses these prefixes in their first coding attempts, things will be easier to follow.<br />
Perhaps this could become a convention to help us all read promise code better.</div>
Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0tag:blogger.com,1999:blog-8768144104280624268.post-13105514727017088462015-05-17T22:07:00.000-07:002015-05-17T22:07:04.679-07:00Windows is fading into history yet...<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="http://a.abcnews.com/images/Business/AP_microsoft_jtm_140717_16x9_992.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://a.abcnews.com/images/Business/AP_microsoft_jtm_140717_16x9_992.jpg" height="360" width="640" /></a></div>
<div style="text-align: center;">
<br /></div>
When I made a visit to some old Microsoft friends of mine a month or so ago, they told me forget Windows - it's history. And it probably is.<br />
Microsoft, the company that put its software on every desktop in the world shot itself in the foot just too many times.<br />
I recently was in town trying to print up some postcards done in Mail Merge with Word. The margins weren't quite right and Staples didn't have any workstations for me to fix it. I had to take it to another place that fixed PCs and pay $27 to tweak it and have it converted to PDF format. Why PDF? The person at the computer place explained that Microsoft's many versions of Word <i>were not compatible with themselves</i> and thus PDF format became the preferred printing format.<br />
Outstanding!<br />
<br />
Here's how I would save Windows if I were the VP in charge:<br />
<br />
<ol style="text-align: left;">
<li>Separate the Kernel from the rest and sell it as a rock solid separate product.</li>
<li>Sell the GUI and Shell separately and create versions that work on the Kernel that work like NT2000, XP, Win7 and Win8 and let the user chose which shell they want to install.</li>
<li>Make the shells open source and let others make whatever shells they want to for the OS.</li>
<li>Let all non-essential services and features be installed optionally.</li>
<li>Let the user chose between a standard <i>stupid user</i> configuration and a <i>savvy user </i>configuration that doesn't hamper the user from accessing and seeing everything as it really is.</li>
<li>Create a smart interactive website that documents the registry and all other aspects of Windows with the ability for users to contribute and improve it - kinda like a wiki for windows.</li>
<li>Improve setups to install, uninstall and move/relocate each feature or app.</li>
<li>All services or other components that store state should be able to write their state to a file and read it back in - this allows easy state comparisons for research/troubleshooting and helps make components portable.</li>
</ol>
I don't know if this would save things or not but it would give users much more choices and power to effect changes for themselves instead of this monolithic mess that keeps changing on us.<br />
<br />
2 <strike>C</strike></div>
Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0tag:blogger.com,1999:blog-8768144104280624268.post-61822223885224710052014-05-11T07:49:00.000-07:002014-05-11T07:49:34.247-07:00Gotta love it<div dir="ltr" style="text-align: left;" trbidi="on">
I am/was a UI developer. My work forces me to think about the end user all the time. So here's another lame Microsoft example from Windows Live Mail which I just had to rant about.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaYewjJrIgy5pRMJD9HGwiudIGcxvqNTHk7D5j7nFJpXHeIBQwdwzAtYAmOId6HR82wm2aOHqAC22bZjHqpu-mkUHldC6E7BtnTb11HaDQphTCDC4vpXKxKJ5rQaWmPCAnL32jQ8RkaKcc/s1600/Internet+Security+Warning+Dialog.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaYewjJrIgy5pRMJD9HGwiudIGcxvqNTHk7D5j7nFJpXHeIBQwdwzAtYAmOId6HR82wm2aOHqAC22bZjHqpu-mkUHldC6E7BtnTb11HaDQphTCDC4vpXKxKJ5rQaWmPCAnL32jQ8RkaKcc/s1600/Internet+Security+Warning+Dialog.png" height="222" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Is this lame or what?</div>
<div class="separator" style="clear: both; text-align: left;">
Which Server? What Certificate? What does CN mean to an end-user? What was the passed in value?</div>
<div class="separator" style="clear: both; text-align: left;">
This is just a lazy dialog where the programmer just didn't want to take the time to locate the pertinent information to tell the user. I can appreciate that sometimes, when an error happens, it is so far away from where the data is that it can take some real work to get that information to the user - but without it, the UI is kinda useless.</div>
<div class="separator" style="clear: both; text-align: left;">
I keep getting these and I use 5 accounts on WLM so it's been difficult for me to fathom what is really the problem.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Rant Done.</div>
<br /></div>
Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0tag:blogger.com,1999:blog-8768144104280624268.post-24778539419304586282014-03-15T00:12:00.001-07:002014-03-15T00:12:20.627-07:00All glyphs for UTF-8<div dir="ltr" style="text-align: left;" trbidi="on">
I spent some time producing a better glyph page for the UTF-8 codepage - just for kicks. Maybe somebody can use it.<br />
<h2 style="text-align: left;">
<a href="http://thebattmanhome.com/allutf8chars.html" target="_blank">Go Here</a></h2>
</div>
Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0tag:blogger.com,1999:blog-8768144104280624268.post-67211045395043651522013-12-14T21:56:00.001-08:002013-12-17T12:44:56.865-08:00MSIE 11 - isnt<div dir="ltr" style="text-align: left;" trbidi="on">
I got pretty upset when I was trying to figure out how to identify IE 11 from other browsers when trying to get a simple sound playing function to work on all browsers.<br />
It turns out IE has decided in version 11 to lie about itself.<br />
The userAgent string for IE11 no longer has the string "MSIE" in it - which has been there since it began.<br />
Luckily, I did find a solution <a href="http://stackoverflow.com/questions/19987447/ie-user-agent-regexp-inclidung-ie11-and-compat-view" target="_blank">here</a>.<br />
But just because the magic of regular expressions comes to save the day doesn't excuse Microsoft for once again throwing yet another monkey-wrench into programming by <em>lying.</em><br />
The <a href="http://www.w3schools.com/jsref/prop_nav_useragent.asp" target="_blank">userAgent string</a> has the express purpose of identifying to code what browser and version is running. If you are viewing this on IE11 (which I am writing it on) and you select the help\about menu option, you will see it says "Internet Explorer 11" followed by a precise build number.<br />
If you print the navigator.userAgent string you will find: <br />
<strong></strong><br />
<strong>Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko</strong><br />
<br />
Now where do you see either "Internet Explorer/IE" or "version 11" in that string? Well you can tell its MSIE because it says "Trident" and you can tell it's version 11 because it says "7.0" - simple right?<br />
Most likely this change was decided upon because Microsoft has been trying to better emulate Firefox and this userAgent string is so much like a Firefox userAgent string as to fool existing code.<br />
But IE is not Firefox and I know for a fact that there are still lots of differences between IE11 and the latest Firefix browser.<br />
It is the short-cut to save time so that a million other developers, like yours truly, can spend hours searching for or inventing a solution. It's the kind of lazy logic that makes the world just a little bit worse.<br />
<span style="font-size: large;">Thank you Microsoft-bozo, whoever you are, that made this LAME decision.</span><br />
<br />
Sandy<br />
<br />
PS: Ah Microsoft receives the righteous consequence of their stupidity:<br />
Google is not happy with IE11!<br />
<br />
<span style="background-color: #ffd966;">The browser we detected is unsupported and may result in unexpected behavior. <br /> Please choose from our list of </span><a gxp:ph="supported_browsers_link" href="https://draft.blogger.com/go/supported-browser-help" target="_blank"><span style="background-color: #ffd966; color: #1155cc;"> supported browsers </span></a><span style="background-color: #ffd966;"> for the best experience.</span></div>
Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0tag:blogger.com,1999:blog-8768144104280624268.post-70733436342654767512013-11-10T10:36:00.000-08:002013-11-12T08:59:20.432-08:00A review of the Eric P. Dollard video FOUR QUADRANT REPRESENTATION OF ELECTRICITY.<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Verdana, sans-serif;">I just completed viewing a video of Eric P. Dollard entitled </span><span style="font-family: Courier New;"><em>FOUR QUADRANT REPRESENTATION OF ELECTRICITY</em> <span style="font-family: Verdana;">which I purchased from <a href="http://fourquadranttheory.com/" target="_blank">here</a><em>.</em></span></span><br />
<span style="font-family: Verdana;">I purchased this because I like Eric personally and I wanted to support him and because I didn't think I would have the time to get through the book.</span><br />
<span style="font-family: Verdana;">Unfortunately, after finishing the video, I am sorely disappointed.</span><br />
<span style="font-family: Verdana;">What this video should be titled is BASIC AC ELECTRICAL AND MOTOR THEORY USING A 4 PHASE REPRESENTATION.</span><br />
<span style="font-family: Verdana;">The only thing in the entire video that I didn't learn at BEEP and A school in the US Navy is a minor mathematical innovation that lets you express all four quadrants of an AC wave symmetrically. (ie introducing a +j and -j coordinate space)</span><br />
<span style="font-family: Verdana;">Unfortunately Dollard never develops the math or subject beyond basic AC theory applications.</span><br />
<span style="font-family: Verdana;">Dollard is always fun to listen to because he has practical experience, deep theoretical and historical knowledge and tons of interesting experiences and anecdotes to relate. This video is no exception, I was very entertained by his anecdotes and historical references.</span><br />
<span style="font-family: Verdana;">The quality of the video production is atrocious and shows a typical short-sighted methodology to maximize profit and minimize work.</span><br />
<span style="font-family: Verdana;">Eric is invited to talk at a Bedini-Lindeman conference and it is recorded with a very cheap camera and microphone system. It is then run though a cheap (freeware most likely) video editing system and reduced down to minimum quality and file size (leaving numerous and annoying compression artifacts in the video) with still shots of Eric's diagrams taken from the projector image and photos overlayed onto the video at appropriate points. This results in blurred images and diagrams you can't read, long sections of video where Dollard is looking off to the side at the projection screen where the images are and most likely were shot from (you can see the photo flashes going off during the talk). All the video captures of Dollard pointing out parts of diagrams using a white light pen result in a pointer image that can barely be seen on the video.</span><br />
<span style="font-family: Verdana;">Content is also disappointing because Eric tends to favor questions and interruptions from the audience pulling him off track. Dollard actually openly says in the video that he had to leave 90% of the theory out of the talk - he just didn't have time to cover it. </span><br />
<span style="font-family: Verdana;">The </span><span style="font-family: Verdana;">Dollard lecture was clearly done before the book was completed and so Dollard speaks from scattered notes.</span><br />
<br />
<span style="font-family: Verdana;">The real disappointment is that I paid $27 for this video that is below the quality found on most instructional videos free on u-tube which the selling <a href="http://fourquadranttheory.com/" target="_blank">webpage</a> says is </span><br />
<span style="font-family: Verdana;">"<span style="font-family: Courier New, Courier, mono;">guaranteed to meet even your highest expectations.</span>
</span><br />
<div align="left" class="flush">
<span style="font-family: Verdana;"><span style="font-family: Courier New, Courier, mono;"><span class="style3"><strong>P.P.S.</strong> Remember, you're not risking a single penny since it is 100% guaranteed!"</span></span></span></div>
<span style="font-family: Verdana;">
</span><br />
<div align="left" class="flush">
<span style="font-family: Verdana;"><span style="font-family: Courier New, Courier, mono;"><span class="style3"></span></span> </span></div>
<span style="font-family: Verdana;">
</span><br />
<div align="left" class="flush">
<span style="font-family: Verdana;"><span class="style3"><span style="font-family: Verdana, sans-serif;">I shall be asking for my money back soon. Perhaps I can talk them into giving me the book rather than my money back. I can then review that for you as well here before you have to risk your cash to find out if it is worth the price.</span></span></span></div>
<span style="font-family: Verdana;">
</span><br />
<div align="left" class="flush">
<span style="font-family: Verdana;"><span class="style3"></span>------ </span></div>
<span style="font-family: Verdana;">
</span><div align="left" class="flush">
<span style="font-family: Verdana;"><span class="style3">In general, I have found disappointment to follow almost everything I have done with the Bedini-Lindeman group. A consistent lack of professional care in production, organization and dissemination of knowledge along the lines of alternative energy topics and consistently overpriced.</span></span><br />
<span style="font-family: Verdana;">I would not go so far as to say these guys are trying to rip people off. However, these guys are trying to make a living off of the technology before it is ready and thus I think are forced into cutting corners that a professional would not.</span></div>
<span style="font-family: Verdana;">
<div align="left" class="flush">
<span class="style3"></span> </div>
<div align="left" class="flush">
<span class="style3">How I would do a Dollard video:</span></div>
<ul style="text-align: left;">
<li><div class="flush" style="text-align: left;">
<span class="style3">Get Eric to get all his images and photos into a PowerPoint form.</span></div>
</li>
<li><div class="flush" style="text-align: left;">
<span class="style3">Use a good PC recording tool such as SnagIt ($35) to sit down at a PC with a good mike and give his talk in a quiet room uninterrupted using his power point images without interruption.</span></div>
</li>
<li><div class="flush" style="text-align: left;">
<span class="style3">Edit this down to remove mistakes and silence.</span></div>
</li>
<li><div class="flush" style="text-align: left;">
<span class="style3">Create a 1080p version of the presentation.</span></div>
</li>
<li><div class="flush" style="text-align: left;">
<span class="style3">Break the talk down into sections and put an index with timestamps at the front of the video.</span></div>
</li>
<li><div class="flush" style="text-align: left;">
<span class="style3">THEN sell that!</span></div>
</li>
</ul>
<div class="flush" style="text-align: left;">
<span class="style3">I'll let you know how the book goes if I can get it exchanged for the video.</span></div>
<div class="flush" style="text-align: left;">
<span class="style3"></span> </div>
<div class="flush" style="text-align: left;">
<span class="style3">Sandy</span><br />
------ LATER -----<br />
<span style="font-family: Verdana, sans-serif;"><strong>I asked for my $ back which had to go to Peter Lindeman, the man behind the sale of this lame video:</strong></span><br />
<strong></strong><br />
<div style="background: rgb(228, 228, 228); font-color: black;">
<b>From:</b> <a href="wlmailhtml:{1EB18D23-1E2E-48F6-B164-C49580DA277A}mid://00000009/!x-usc:mailto:sanfords@gmail.com" moz-do-not-send="true" title="sanfords@gmail.com">Sanford Staab (GMail)</a> </div>
<div>
<b>To:</b> <a href="wlmailhtml:{1EB18D23-1E2E-48F6-B164-C49580DA277A}mid://00000009/!x-usc:mailto:update@free-energy.ws" moz-do-not-send="true" title="update@free-energy.ws">Peter Lindemann's Free Energy Newsletter</a> </div>
<div>
<b>Sent:</b> Sunday, November 10, 2013 10:54 AM</div>
<div>
<b>Subject:</b> Request exchange on Four-Quadrant Representation of Electricity Video</div>
<div>
</div>
<div dir="ltr">
<div style="color: black; font-family: "Calibri"; font-size: 12pt;">
<div>
I would like to propose an exchange of the video I recently purchased from <a href="wlmailhtml:{1EB18D23-1E2E-48F6-B164-C49580DA277A}mid://00000009/!x-usc:http://fourquadranttheory.com/" moz-do-not-send="true" title="http://fourquadranttheory.com/">http://fourquadranttheory.com/</a> for the book version. (Rather than a refund)</div>
<div>
Here is a <a href="wlmailhtml:{1EB18D23-1E2E-48F6-B164-C49580DA277A}mid://00000009/!x-usc:http://technodweebtimes.blogspot.com/2013/11/a-review-of-four-quadrant.html" moz-do-not-send="true">review</a> I have just published of the video which I think should explain my disappointment.</div>
<div>
</div>
<div>
I would be happy to discuss with you ways to improve your products and might even be able to do services for you for a fee.</div>
<div>
I had offered assistance to the Bedini crew years ago when I had published a review if one of their first conferences <a href="wlmailhtml:{1EB18D23-1E2E-48F6-B164-C49580DA277A}mid://00000009/!x-usc:http://sandysanfords.wordpress.com/2010/11/15/my-review-of-the-renaissance-workshopconference-of-11-2010/" moz-do-not-send="true">here</a>.</div>
<div>
Apparently I am not trusted due to actually being interested in helping them yet a relative stranger to them.</div>
<div>
</div>
<div>
I have a friend who is a professional video editor and can do a much better job for you on videos as well – both recording and production.</div>
<div>
</div>
<div>
I really do mean to be helpful to you but my consistent disappointments have caused most of my feedback to be negative.</div>
<div>
</div>
<div>
Sandy Staab</div>
<div>
Fellow Free Energy Advocate</div>
</div>
</div>
<div style="color: black; font-family: "Calibri"; font-size: 12pt;">
</div>
<div style="color: black; font-family: "Calibri"; font-size: 12pt;">
<strong><span style="font-family: Verdana, sans-serif;">To which he responded:</span></strong></div>
<div style="color: black; font-family: "Calibri"; font-size: 12pt;">
<span style="font-size: x-small;">Dear Sanford,<br /><br />Sorry you didn't like the film. Your only recourse is to go back to Clickbank and get a refund. There are no exchanges. If you do get a refund for the film, please DON'T buy the book. I assume you can find things to complain about in it, and since it covers the same material, you won't learn anything new from it anyway.<br /><br />The film is a LIVE presentation to the conference audience. The promotional materials make that quite plain. The root camera file is cut in true HD and is over 38GB in size. There were a few problems with the radio mics in the room, which our camera people were taking the feed from. The file reduction to a downloadable size introduced some interlacing problems due to the MAC conversion to PC formats. Beyond that, all of your criticisms represent your personal preference.<br /><br />The purpose of the film is to make Eric's lecture, exactly as it happened, available to his students, followers and supporters. We were specifically asked to leave it "uncut", which we did.<br /><br />Your closing statement is quite telling. The truth is, if you REALLY meant to be helpful, you would have found a way!<br /><br />Regards,<br />Peter</span><br />
<pre class="moz-signature" cols="60"><span style="font-family: Verdana, sans-serif;"><strong>To which I responded:</strong></span></pre>
<pre class="moz-signature" cols="60"><span style="font-size: x-small;">On 11/10/2013 9:03 PM, Sanford Staab (GMail) wrote: </span><blockquote cite="mid:9B904BD513DF4BDE9578FE9062082BE9@SandyHP" type="cite">
<div dir="ltr">
<div style="color: black; font-family: "Calibri"; font-size: 12pt;">
<div>
Can you tell me how much of my purchase price goes to Eric Dollard? I’d be happy to leave you with your money should I know that I at least helped Eric with my purchase.</div>
</div>
</div>
</blockquote>
</pre>
</div>
<div style="color: black; font-family: "Calibri"; font-size: 12pt;">
</div>
<div style="color: black; display: inline; font-family: "Calibri"; font-size: small; font-style: normal; font-weight: normal; text-decoration: none;">
<div style="color: black; font-family: "Calibri"; font-size: 12pt;">
<strong><span style="font-family: Verdana, sans-serif; font-size: small;">To which he responded:</span></strong> </div>
<div style="color: black; font-family: "Calibri"; font-size: 12pt;">
</div>
</div>
<div style="color: black; font-family: "Calibri"; font-size: 12pt;">
</div>
<div style="color: black; display: inline; font-family: "Calibri"; font-size: small; font-style: normal; font-weight: normal; text-decoration: none;">
<div style="color: black; font-family: "Calibri"; font-size: 12pt;">
Sanford,<br />
<br />
The
financial arrangements between Eric and his publisher are confidential. Eric is
pleased with the arrangement. You should not expect to have this sort of
information shared with you, as you are not a party to the
contract.<br />
<br />
Peter<br />
<br />
<div style="color: black; font-family: "Calibri";">
<span style="font-family: Verdana, sans-serif;"><strong>To which I responded:</strong></span></div>
<div style="color: black; font-family: "Calibri"; font-size: 12pt;">
</div>
<div style="color: black; font-family: "Calibri"; font-size: 12pt;">
Ok. I would just like to know if my purchase is helping Eric. Sounds like it is.</div>
</div>
<div style="color: black; font-family: "Calibri"; font-size: 12pt;">
</div>
<div style="color: black; font-family: "Calibri"; font-size: 12pt;">
------<br />
</div>
<div style="color: black; font-family: "Calibri"; font-size: 12pt;">
<span style="font-family: Verdana, sans-serif;">After some searching I found a much better video (I think) on the very same subject (where Eric reads from his book/notes) along with the full text of Sir Edmond Whittaker's work for FREE:</span></div>
<div style="color: black; font-family: "Calibri"; font-size: 12pt;">
<a href="http://www.youtube.com/watch?v=3r-x0UCdl0Q">http://www.youtube.com/watch?v=3r-x0UCdl0Q</a></div>
</div>
</div>
<div style="color: black; display: inline; font-family: "Calibri"; font-size: small; font-style: normal; font-weight: normal; text-decoration: none;">
<div class="flush" style="color: black; font-family: "Calibri"; font-size: 12pt; text-align: left;">
<a href="https://archive.org/details/historyoftheorie00whitrich">https://archive.org/details/historyoftheorie00whitrich</a> - Whittaker<br />
<a href="https://archive.org/details/elementarylesso08thomgoog">https://archive.org/details/elementarylesso08thomgoog</a> - Thompson<br />
<a href="https://archive.org/details/radiationlight00steirich">https://archive.org/details/radiationlight00steirich</a><br />
<a href="https://archive.org/details/elementarylectur00stei">https://archive.org/details/elementarylectur00stei</a> - Steinmetz<br />
Others can be easily found on archive.org.</div>
<div class="flush" style="color: black; font-family: "Calibri"; font-size: 12pt; text-align: left;">
</div>
<div class="flush" style="color: black; font-family: "Calibri"; font-size: 12pt; text-align: left;">
<span style="color: blue;">It is sad that people who should know how to disseminate critical knowledge instead chose to make money off of the ignorance of others and pretend to disseminate that knowledge while at the same time hiding that knowledge.</span></div>
<div class="flush" style="color: black; font-family: "Calibri"; font-size: 12pt; text-align: left;">
<br />
</div>
<div class="flush" style="color: black; font-family: "Calibri"; font-size: 12pt; text-align: left;">
<pre class="moz-signature" cols="60"> </pre>
</div>
</div>
<div class="flush" style="color: black; font-family: "Calibri"; font-size: 12pt; text-align: left;">
<pre class="moz-signature" cols="60"> </pre>
</div>
</span><br /></div>
Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com1tag:blogger.com,1999:blog-8768144104280624268.post-37710907416262483952013-10-30T20:33:00.003-07:002013-10-30T20:33:56.803-07:00Javascript OOpseseses<div dir="ltr" style="text-align: left;" trbidi="on">
Yes, well I am confessing that I enjoy working with JavaScript for much the same reasons as <a href="http://www.crockford.com/">Mr. Douglas Crockford</a> does. I was attempting to do a little OO coding, trying to basically specify an interface with a base class and inheriting from that class for various implementations of the interface.<br />
This <a href="http://javascript.crockford.com/prototypal.html">blog</a> I found was quite helpful to me but still vague in how to properly use it.<br />
So here is some short code I made up that convinced me of the right way to do inheritance.<br />
<blockquote class="tr_bq">
<div style="background-color: white; color: black; font-family: "Courier New"; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none;">
<pre><span style="color: maroon;"><</span><span style="color: purple;">!DOCTYPE</span><span> html</span><span style="color: maroon;">></span>
<span style="color: maroon;"><</span><span style="color: purple;">html</span><span style="color: maroon;">></span>
<span style="color: maroon;"><</span><span style="color: purple;">head</span><span style="color: maroon;">></span>
<span> </span><span style="color: maroon;"><</span><span style="color: purple;">title</span><span style="color: maroon;">></span><span>Playing</span><span> </span><span>with</span><span> </span><span>OO</span><span> </span><span>javascript</span><span style="color: maroon;"><</span><span style="color: purple;">/title</span><span style="color: maroon;">></span>
<span style="color: maroon;"><</span><span style="color: purple;">script</span><span> </span><span>type</span><span style="color: maroon;">=</span><span style="color: teal;">"text/javascript"</span><span style="color: maroon;">></span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;">// see http://javascript.crockford.com/prototypal.html</span>
<span style="background-color: #d8d8d8; color: purple;">if</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8; color: purple;">typeof</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">Object</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">create</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">!==</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'function'</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">Object</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">create</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">function</span><span style="background-color: #d8d8d8;"> (</span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">function</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">F</span><span style="background-color: #d8d8d8;">() </span><span style="background-color: #d8d8d8; color: maroon;">{}</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">F</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">prototype</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">new</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">F</span><span style="background-color: #d8d8d8;">()</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">}</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;">// Usage:newObject = Object.create(oldObject);</span>
<span style="background-color: #d8d8d8; color: purple;">function</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">createParentClassInstance</span><span style="background-color: #d8d8d8;">() </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">var</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: maroon;">{}</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">item1</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'Parent says: hi.'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">item2</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'I\'m the parent'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8; color: purple;">function</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">createChildClassInstance</span><span style="background-color: #d8d8d8;">() </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">var</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">Object</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8; font-weight: bolder;">create</span><span style="background-color: #d8d8d8;">(</span><span style="background-color: #d8d8d8; font-weight: bolder;">createParentClassInstance</span><span style="background-color: #d8d8d8;">())</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">item2</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'I\'m the child'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">item3</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'Child says hi.'</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">return</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">o</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8; color: purple;">function</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">out</span><span style="background-color: #d8d8d8;">(</span><span style="background-color: #d8d8d8;">s</span><span style="background-color: #d8d8d8;">) </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">document</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">body</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">innerHTML</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">+=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">s</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="background-color: #d8d8d8; color: purple;">function</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">PageLoad</span><span style="background-color: #d8d8d8;">() </span><span style="background-color: #d8d8d8; color: maroon;">{</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">var</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">parentInstance</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">createParentClassInstance</span><span style="background-color: #d8d8d8;">()</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: purple;">var</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">childInstance1</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">=</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">createChildClassInstance</span><span style="background-color: #d8d8d8;">()</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">out</span><span style="background-color: #d8d8d8;">(</span><span style="background-color: #d8d8d8;">parentInstance</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">item1</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">+</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'<br>'</span><span style="background-color: #d8d8d8;">)</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">out</span><span style="background-color: #d8d8d8;">(</span><span style="background-color: #d8d8d8;">parentInstance</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">item2</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">+</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'<br>'</span><span style="background-color: #d8d8d8;">)</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">out</span><span style="background-color: #d8d8d8;">(</span><span style="background-color: #d8d8d8;">parentInstance</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">item3</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">+</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'<br><br>'</span><span style="background-color: #d8d8d8;">)</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">out</span><span style="background-color: #d8d8d8;">(</span><span style="background-color: #d8d8d8;">childInstance1</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">item1</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">+</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'<br>'</span><span style="background-color: #d8d8d8;">)</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">out</span><span style="background-color: #d8d8d8;">(</span><span style="background-color: #d8d8d8;">childInstance1</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">item2</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">+</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'<br>'</span><span style="background-color: #d8d8d8;">)</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; font-weight: bolder;">out</span><span style="background-color: #d8d8d8;">(</span><span style="background-color: #d8d8d8;">childInstance1</span><span style="background-color: #d8d8d8;">.</span><span style="background-color: #d8d8d8;">item3</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8;">+</span><span style="background-color: #d8d8d8;"> </span><span style="background-color: #d8d8d8; color: #006060;">'<br><br>'</span><span style="background-color: #d8d8d8;">)</span><span style="background-color: #d8d8d8;">;</span>
<span style="background-color: #d8d8d8; color: maroon;">}</span>
<span style="color: maroon;"><</span><span style="color: purple;">/script</span><span style="color: maroon;">></span>
<span style="color: maroon;"><</span><span style="color: purple;">/head</span><span style="color: maroon;">></span>
<span style="color: maroon;"><</span><span style="color: purple;">body</span><span> </span><span>onload</span><span style="color: maroon;">=</span><span style="color: teal;">"PageLoad();"</span><span style="color: maroon;">></span>
<span style="color: maroon;"><</span><span style="color: purple;">/body</span><span style="color: maroon;">></span>
<span style="color: maroon;"><</span><span style="color: purple;">/html</span><span style="color: maroon;">></span>
</pre>
</div>
</blockquote>
Note how we hide the definition of the objects within a clearly defined constructor function. Inheritance is controlled by the class factory so things become clear what they mean and its not easy to just throw objects together in random inheritance trees.<br />
If would also seem that multiple inheritance could be done this way by simply cascading the instance creation functions to make a multi-generational inheritance structure.<br />
I am hoping that Dr. Crockford will have a chance to comment on this blog and correct me if I am wrong here. </div>
Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com2tag:blogger.com,1999:blog-8768144104280624268.post-49493131487517572332013-07-09T18:26:00.002-07:002013-07-09T18:27:55.700-07:00Linear speaking fractally<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC_aPUZWGW8Q4DN924mv8a0ZBF2F4QTj4e5xpaBZ2Mf3ftbgPBLWyRprSFJmN4YLaavbKFQNxS_47382tlFGGm1aLYsGGd221jcP7XGW4Cs_YTZtXQRLozHDPzpRb_0L2YE_xhmXBbhP5T/s1600/sprio.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC_aPUZWGW8Q4DN924mv8a0ZBF2F4QTj4e5xpaBZ2Mf3ftbgPBLWyRprSFJmN4YLaavbKFQNxS_47382tlFGGm1aLYsGGd221jcP7XGW4Cs_YTZtXQRLozHDPzpRb_0L2YE_xhmXBbhP5T/s1600/sprio.gif" /></a></div>
Many years ago I wrote a line fractal application in C that uncovered a never-found bug in the GDI layer of WindowsNT.<br />
It was a fun app to write and I have since redone it in C#. I originally created an MSN Group to distribute it but as much of Microsoft's cloud support - feature one year, bug the next - it was dropped.<br />
<br />
So here is a post just to expose it to anyone wanting to try it out: <a href="http://thebattmanhome.com/Sandy/LineFrac.rar">http://thebattmanhome.com/Sandy/LineFrac.rar</a><br />
<br />
Just download the .rar file (use WinRAR.exe to unpack) and run the .exe.<br />
You will need some .Net runtime support - I believe it runs on .Net 3.0.<br />
No certificate but I can vouch that its not a virus.<br />
<br />
The idea of a line fractal is that of creating an alternative path between two points. Then each sub-part of the alternative path is itself altered to use the alternative path scaled to fit the two new points. After some recursion, you have a cool looking design.<br />
Add some color, the option of drawing a line or not in the subpath and you have almost a work of art.<br />
<br />
Enjoy!</div>
Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0tag:blogger.com,1999:blog-8768144104280624268.post-70476311928550624582013-06-05T20:17:00.005-07:002013-06-05T20:17:34.236-07:00Poor Batch Scripts<div dir="ltr" style="text-align: left;" trbidi="on">
I was whipping up some Batch scripts to rename .eml files for me so that the names included the date, subject, to and from fields to make it easier to organize and find my archived emails.<br />
I have long used bat/cmd scripts to do stuff like this but this little project took me a full day with many breaks to relieve the frustration.<br />
Knowing Steve Wood who built the cmd batch processor is cool but it still never helped me figure out this problem:<br />
<br />
The variables in batch scripts can use a syntax which allows some string substitutions like:<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">%foovar:x=y%</span> which returns the value of the variable with all x strings replaced by y.<br />
Its nice for simple cases but I found it impossible to substitute out * characters.<br />
This is because doing:<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">%foovar:*=-%</span> is specially interpreted to mean all of the variable contents up to whatever comes after the *.<br />
<br />
I tried <span style="font-family: "Courier New", Courier, monospace;">%foovar:^*=-%</span>, <span style="font-family: "Courier New", Courier, monospace;">%foovar:"*"=-%</span> and even <span style="font-family: "Courier New", Courier, monospace;">%foovar:**=-%</span> with no luck.<br />
<br />
Hmmmm.</div>
Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0tag:blogger.com,1999:blog-8768144104280624268.post-45061321049832044052013-04-10T16:32:00.000-07:002013-04-10T16:34:55.168-07:00Ah the joys of working with Microsoft's SQL Server<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/proxy/AVvXsEgZbUny9c04IGHx9ZAWpYRslCrGBPk6kvWmK_FiCVLJppqmnBq_yTW3ko4P74c0J4aLWXhztUvLYMtLPVwKBwrBkpa35_Fx9-wPmSqaFPZP9j9b_xKG5ID8qjfOAD79pmiypzqSo1x-w8xXJSTp6rTUgaBKRkS8NjfK72SWRgt-m2Z9CZOXhWIrJKpV73D4veET_ajuCHJSFhi6rz-ZcchpyCZViVdnZt-MJPTS99KiPM94lu79yUvi=" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="140" src="https://blogger.googleusercontent.com/img/proxy/AVvXsEgZbUny9c04IGHx9ZAWpYRslCrGBPk6kvWmK_FiCVLJppqmnBq_yTW3ko4P74c0J4aLWXhztUvLYMtLPVwKBwrBkpa35_Fx9-wPmSqaFPZP9j9b_xKG5ID8qjfOAD79pmiypzqSo1x-w8xXJSTp6rTUgaBKRkS8NjfK72SWRgt-m2Z9CZOXhWIrJKpV73D4veET_ajuCHJSFhi6rz-ZcchpyCZViVdnZt-MJPTS99KiPM94lu79yUvi=" width="320" /></a></div>
The past 3 days have been largely unproductive because of the complexities arising from multiple versions of SQL Server and Visual Studio on my machine. There is a known bug where if you installed VSExpress 2010 at sometime in the past and then try to install the SQL Server client tools you will have a dependency problem that prevents the SQL tool installation.<br />
In my efforts to get this installed I pulled off all my SQL Servers and my Visual Studios but to no avail. Even the hack found <a href="http://blogs.msdn.com/b/guil/archive/2008/12/14/sql-server-2008-installation-dependency-problems-with-visual-studio-2008-sp1.aspx">here</a> failed me.<br />
Today after many many hours of frustration I believe I have things back on track but man is my machine probably messed up getting to this state and I doubt I will remember all the steps and things I tried if I have to do this again.<br />
Why is it that software for money is so complex? I think Christ was right when he said that money is the root of all evil. <br />
The motivations to make money in software are contrary to the motivation to actually <em>solve</em> a problem. New releases are needed to keep money flowing in - whether or not they are really needed. And you can't charge someone for a bug-fix release - that is just too embarrassing to admit and to audacious to charge people for. You need to package it in ways that maximizes the ROI. You have to invent more fancy ways to use your solution, and you better not find a better solution that makes your old one obsolete - not unless you have competition forcing your hand.<br />
SQL Server has historically been a pretty expensive product and not easy to get at the Microsoft Company Store. Today I installed SQL Server Express 2012 - the competition has forced the great Microsoft to release its technology free. MySQL and other free solutions are just too good to keep the fences up.<br />
When working on Sidewalk, an early Microsoft website done before the days of ASP, a very clever developer on our team invented CQL (Conceptual Query Language) which consisted of an ODBC driver that accepted queries in a high-level language that was then translated into the optimal SQL query and cached. Once this engine got loaded up it screamed and devs no longer needed to know much at all about the schema.<br />
That dev was later hired by the SQL Server team, and I had high hopes to see CQL shipped as a revolutionary solution - but it never happened.<br />
I doubt it could be due to a technical problem, as we were using it under real life loads in Sidewalk for years.<br />
I think such a revolutionary solution would have put too many DB consultants out of business, including a whole division within Microsoft.<br />
So we live with layer of crap over a pretty good basic DB engine and the whole world gets to download gigabyte plus sized install packages to deal with the immense complexities of products that have 20+ versions and packages out there. Just look at this <a href="http://blog.sqlauthority.com/2012/03/11/sql-server-2012-all-download-links-in-single-page-sql-server-2012/">download page</a>.<br />
Code reuse - till the business model fails.<br />
<br />
Sorry, I'm just burnt out on this stuff.</div>
<!-- Blogger automated replacement: "http://images-onepick-opensocial.googleusercontent.com/gadgets/proxy?container=onepick&gadget=a&rewriteMime=image%2F*&url=http%3A%2F%2Fwww.sqlservergeeks.com%2FAssets%2FUploaded-CMS-Files%2FConfiguration%2520manager-fdea0173-5613-4fb0-9018-3ed037556d92.JPG" with "https://blogger.googleusercontent.com/img/proxy/AVvXsEgZbUny9c04IGHx9ZAWpYRslCrGBPk6kvWmK_FiCVLJppqmnBq_yTW3ko4P74c0J4aLWXhztUvLYMtLPVwKBwrBkpa35_Fx9-wPmSqaFPZP9j9b_xKG5ID8qjfOAD79pmiypzqSo1x-w8xXJSTp6rTUgaBKRkS8NjfK72SWRgt-m2Z9CZOXhWIrJKpV73D4veET_ajuCHJSFhi6rz-ZcchpyCZViVdnZt-MJPTS99KiPM94lu79yUvi=" -->Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0tag:blogger.com,1999:blog-8768144104280624268.post-52856386571958836142013-02-14T07:46:00.002-08:002013-02-14T08:27:43.835-08:00SQL - the problem what should not be.<div dir="ltr" style="text-align: left;" trbidi="on">
After spending about 5 hours trying to get a nested SQL query working I sit in frustration at how lame the language is and how even more lame the parsers are for the language.<br />
They say the last 10% of any project is the hardest, and I agree.<br />
We now have lame speech recognition but we don't have excellent SQL parsing.<br />
What's worse, I know too much. I know that this whole SQL thing was solved by the Sidewalk team at Microsoft back in 1997 by an ingenious developer who devised CQL (Conceptual Query Language) which was implemented using an ODBC driver on top of SQL Server.<br />
We had a schema that was so big, it covered about 100 feet of wall-space around our offices when printed on huge 4x5 foot sheets of paper in 12pt font or so! It became so difficult to generate efficient (even correct) SQL queries that CQL was devised. It analyzed the schema and then, given a much more free-form language describing the problem in a table-less flat space would create the optimal SQL query for the CQL specification and cache it and return the results. Parameters could be set up to substitute into the cached queries and, whalla, the whole SQL efficiency, complexity and parsing problem was gone.<br />
That enterprising developer was hired by the SQL Server team. Unfortunately, CQL never saw the light of day. I suppose that it didn't make sense to solve a core problem like that. There was just too much invested in SQL consulting and systems to bypass it. I'm sure it came down to $.<br />
Anyway, my specific problem is this:<br />
<br />
Schema:<br />
<div style="background-color: white; color: black; font-family: "Courier New"; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none;">
<pre><span style="color: green; font-style: italic;">-- phpMyAdmin SQL Dump</span>
<span style="color: green; font-style: italic;">-- version 3.4.5</span>
<span style="color: green; font-style: italic;">-- http://www.phpmyadmin.net</span>
<span style="color: purple;">SET</span> SQL_MODE=<span style="color: teal;">"NO_AUTO_VALUE_ON_ZERO"</span>;
<span style="color: purple;">SET</span> time_zone = <span style="color: teal;">"+00:00"</span>;
<span style="color: purple;">CREATE</span> <span style="color: purple;">TABLE</span> <span style="color: purple;">IF</span> <span style="color: purple;">NOT</span> <span style="color: purple;">EXISTS</span> `links` (
`pageId` int(<span style="color: navy;">10</span>) unsigned <span style="color: purple;">NOT</span> <span style="color: purple;">NULL</span>,
`linkId` int(<span style="color: navy;">10</span>) unsigned <span style="color: purple;">NOT</span> <span style="color: purple;">NULL</span>,
`whenUsed` datetime <span style="color: purple;">NOT</span> <span style="color: purple;">NULL</span>,
`whenRendered` datetime <span style="color: purple;">NOT</span> <span style="color: purple;">NULL</span>,
KEY `pageId` (`pageId`),
KEY `linkId` (`linkId`)
) ENGINE=InnoDB <span style="color: purple;">DEFAULT</span> CHARSET=latin1;
<span style="color: purple;">INSERT</span> <span style="color: purple;">INTO</span> `links` (`pageId`, `linkId`, `whenUsed`, `whenRendered`) <span style="color: purple;">VALUES</span>
(<span style="color: navy;">1</span>, <span style="color: navy;">9</span>, <span style="color: #006060;">'2013-02-14 00:44:20'</span>, <span style="color: #006060;">'2013-02-14 00:42:39'</span>),
(<span style="color: navy;">1</span>, <span style="color: navy;">9</span>, <span style="color: #006060;">'2013-02-14 00:44:21'</span>, <span style="color: #006060;">'2013-02-14 00:42:39'</span>),
(<span style="color: navy;">1</span>, <span style="color: navy;">9</span>, <span style="color: #006060;">'2013-02-14 00:44:23'</span>, <span style="color: #006060;">'2013-02-14 00:44:21'</span>),
(<span style="color: navy;">1</span>, <span style="color: navy;">8</span>, <span style="color: #006060;">'2013-02-14 00:44:25'</span>, <span style="color: #006060;">'2013-02-14 00:44:23'</span>),
(<span style="color: navy;">1</span>, <span style="color: navy;">7</span>, <span style="color: #006060;">'2013-02-14 00:44:26'</span>, <span style="color: #006060;">'2013-02-14 00:44:25'</span>),
(<span style="color: navy;">1</span>, <span style="color: navy;">6</span>, <span style="color: #006060;">'2013-02-14 00:44:28'</span>, <span style="color: #006060;">'2013-02-14 00:44:26'</span>),
(<span style="color: navy;">1</span>, <span style="color: navy;">3</span>, <span style="color: #006060;">'2013-02-14 00:44:29'</span>, <span style="color: #006060;">'2013-02-14 00:44:26'</span>),
(<span style="color: navy;">1</span>, <span style="color: navy;">7</span>, <span style="color: #006060;">'2013-02-14 00:44:31'</span>, <span style="color: #006060;">'2013-02-14 00:44:29'</span>),
(<span style="color: navy;">1</span>, <span style="color: navy;">8</span>, <span style="color: #006060;">'2013-02-14 00:44:32'</span>, <span style="color: #006060;">'2013-02-14 00:44:31'</span>),
(<span style="color: navy;">1</span>, <span style="color: navy;">11</span>, <span style="color: #006060;">'2013-02-14 00:44:34'</span>, <span style="color: #006060;">'2013-02-14 00:44:32'</span>);
</pre>
</div>
<br />
<span style="font-family: inherit;">Inner Query:</span><br />
<div style="background-color: white; color: black; font-family: "Courier New"; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none;">
<pre><span style="background-color: #d8d8d8; color: green; font-style: italic;"><div style="background-color: white; color: black; font-family: "Courier New"; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none;">
<pre><span style="color: purple;">SELECT</span> `linkId`,
TIMEDIFF(`whenUsed`, `whenRendered`) <span style="color: purple;">AS</span> <span style="color: #006060;">'URDiff'</span>,
CONVERT(DATEDIFF(`whenUsed`, UTC_TIMESTAMP()), SIGNED) <span style="color: purple;">AS</span> <span style="color: #006060;">'dateDiff'</span>,
CONVERT(<span style="color: #006060;">'dateDiff'</span> = <span style="color: navy;">0</span>, UNSIGNED) <span style="color: purple;">AS</span> <span style="color: #006060;">'usedToday'</span>,
CONVERT(<span style="color: #006060;">'dateDiff'</span> < <span style="color: navy;">8</span> <span style="color: purple;">AND</span> <span style="color: #006060;">'dateDiff'</span> > <span style="color: navy;">0</span>, UNSIGNED) <span style="color: purple;">AS</span> <span style="color: #006060;">'usedThisWeek'</span>,
CONVERT(<span style="color: #006060;">'dateDiff'</span> < <span style="color: navy;">31</span> <span style="color: purple;">AND</span> <span style="color: #006060;">'dateDiff'</span> > <span style="color: navy;">7</span>, UNSIGNED) <span style="color: purple;">AS</span> <span style="color: #006060;">'usedThisMonth'</span>,
CONVERT(<span style="color: #006060;">'dateDiff'</span> < <span style="color: navy;">365</span> <span style="color: purple;">AND</span> <span style="color: #006060;">'dateDiff'</span> > <span style="color: navy;">30</span>, UNSIGNED) <span style="color: purple;">AS</span> <span style="color: #006060;">'usedThisYear'</span>
<span style="color: purple;">FROM</span> `links`
<span style="color: purple;">WHERE</span> MINUTE(<span style="color: #006060;">'URDiff'</span>) < <span style="color: navy;">15</span> <span style="color: purple;">AND</span> HOUR(<span style="color: #006060;">'URDiff'</span>) = <span style="color: navy;">0</span>
<span style="color: purple;">AND</span> `pageId` = <span style="color: #006060;">'1'</span>
) <span style="color: purple;">AS</span> T
</pre>
</div>
</span></pre>
</div>
<br />
<span style="font-family: inherit;">Results of inner query:</span><br />
<span style="font-family: "Courier New", Courier, monospace; font-size: xx-small;">+--------+----------+----------+-----------+--------------+---------------+--------------+<br />| linkId | URDiff | dateDiff | usedToday | usedThisWeek | usedThisMonth | usedThisYear |<br />+--------+----------+----------+-----------+--------------+---------------+--------------+<br />| 9 | 00:01:41 | 0 | 1 | 0 | 0 | 0 |<br />| 9 | 00:01:42 | 0 | 1 | 0 | 0 | 0 |<br />| 9 | 00:00:02 | 0 | 1 | 0 | 0 | 0 |<br />| 8 | 00:00:02 | 0 | 1 | 0 | 0 | 0 |<br />| 7 | 00:00:01 | 0 | 1 | 0 | 0 | 0 |<br />| 6 | 00:00:02 | 0 | 1 | 0 | 0 | 0 |<br />| 3 | 00:00:03 | 0 | 1 | 0 | 0 | 0 |<br />| 7 | 00:00:02 | 0 | 1 | 0 | 0 | 0 |<br />| 8 | 00:00:01 | 0 | 1 | 0 | 0 | 0 |<br />| 11 | 00:00:02 | 0 | 1 | 0 | 0 | 0 |</span><span style="font-family: "Courier New", Courier, monospace; font-size: xx-small;"></span><br />
<span style="font-family: "Courier New", Courier, monospace; font-size: xx-small;">+--------+----------+----------+-----------+--------------+---------------+--------------+ <span style="font-family: inherit; font-size: small;">Outer Query:</span><br />
<span style="font-family: Times New Roman; font-size: small;"></span></span><br />
<span style="font-family: "Courier New", Courier, monospace; font-size: xx-small;"><span style="font-family: Times New Roman; font-size: small;"></span></span><br />
<span style="font-family: "Courier New", Courier, monospace; font-size: xx-small;"><span style="font-family: Times New Roman; font-size: small;"><div style="background-color: white; color: black; font-family: "Courier New"; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none;">
<pre><span style="color: purple;">SELECT</span>
`linkId`,
<span style="color: purple;">SUM</span>(<span style="color: #006060;">'T.usedToday'</span>) <span style="color: purple;">AS</span> <span style="color: #006060;">'countToday'</span>,
<span style="color: purple;">SUM</span>(<span style="color: #006060;">'T.usedThisWeek'</span>) <span style="color: purple;">AS</span> <span style="color: #006060;">'countThisWeek'</span>,
<span style="color: purple;">SUM</span>(<span style="color: #006060;">'T.usedThisMonth'</span>) <span style="color: purple;">AS</span> <span style="color: #006060;">'countThisMonth'</span>,
<span style="color: purple;">SUM</span>(<span style="color: #006060;">'T.usedThisYear'</span>) <span style="color: purple;">AS</span> <span style="color: #006060;">'countThisYear'</span>
<span style="color: purple;">FROM</span>
(
<span style="color: purple;">SELECT</span> `linkId`,
TIMEDIFF(`whenUsed`, `whenRendered`) <span style="color: purple;">AS</span> <span style="color: #006060;">'URDiff'</span>,
CONVERT(DATEDIFF(`whenUsed`, UTC_TIMESTAMP()), SIGNED) <span style="color: purple;">AS</span> <span style="color: #006060;">'dateDiff'</span>,
CONVERT(<span style="color: #006060;">'dateDiff'</span> = <span style="color: navy;">0</span>, UNSIGNED) <span style="color: purple;">AS</span> <span style="color: #006060;">'usedToday'</span>,
CONVERT(<span style="color: #006060;">'dateDiff'</span> < <span style="color: navy;">8</span> <span style="color: purple;">AND</span> <span style="color: #006060;">'dateDiff'</span> > <span style="color: navy;">0</span>, UNSIGNED) <span style="color: purple;">AS</span> <span style="color: #006060;">'usedThisWeek'</span>,
CONVERT(<span style="color: #006060;">'dateDiff'</span> < <span style="color: navy;">31</span> <span style="color: purple;">AND</span> <span style="color: #006060;">'dateDiff'</span> > <span style="color: navy;">7</span>, UNSIGNED) <span style="color: purple;">AS</span> <span style="color: #006060;">'usedThisMonth'</span>,
CONVERT(<span style="color: #006060;">'dateDiff'</span> < <span style="color: navy;">365</span> <span style="color: purple;">AND</span> <span style="color: #006060;">'dateDiff'</span> > <span style="color: navy;">30</span>, UNSIGNED) <span style="color: purple;">AS</span> <span style="color: #006060;">'usedThisYear'</span>
<span style="color: purple;">FROM</span> `links`
<span style="color: purple;">WHERE</span> MINUTE(<span style="color: #006060;">'URDiff'</span>) < <span style="color: navy;">15</span> <span style="color: purple;">AND</span> HOUR(<span style="color: #006060;">'URDiff'</span>) = <span style="color: navy;">0</span>
<span style="color: purple;">AND</span> `pageId` = <span style="color: #006060;">'1'</span>
) <span style="color: purple;">AS</span> T
<span style="color: purple;">GROUP</span> <span style="color: purple;">BY</span> `linkId`
</pre>
</div>
<span style="font-family: inherit;">Outer query result:</span><span style="font-family: "Courier New", Courier, monospace; font-size: xx-small;">+--------+------------+---------------+----------------+---------------+<br />| linkId | countToday | countThisWeek | countThisMonth | countThisYear |<br />+--------+------------+---------------+----------------+---------------+<br />| 3 | 0 | 0 | 0 | 0 |<br />| 6 | 0 | 0 | 0 | 0 |<br />| 7 | 0 | 0 | 0 | 0 |<br />| 8 | 0 | 0 | 0 | 0 |<br />| 9 | 0 | 0 | 0 | 0 |<br />| 11 | 0 | 0 | 0 | 0 |<br />+--------+------------+---------------+----------------+---------------+</span><br />
<span style="font-family: inherit;"></span><br />
Go figure? I can clearly see from the inner results that there are 3 rows in the usedToday column that are 1 (and I have converted them to unsigned so they should SUM ok). Yet the countToday for linkId 9 is 0 and not 3. Why?<br />
<br />
MySQL gives me some interesting warnings:<br />
<span style="font-family: "Courier New", Courier, monospace; font-size: xx-small;">Warning (Code 1292): Truncated incorrect time value: 'URDiff'<br />Warning (Code 1292): Truncated incorrect time value: 'URDiff'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'dateDiff'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'dateDiff'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'dateDiff'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'dateDiff'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'dateDiff'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'dateDiff'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'dateDiff'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedToday'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisWeek'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisMonth'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisYear'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedToday'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisWeek'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisMonth'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisYear'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedToday'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisWeek'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisMonth'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisYear'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedToday'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisWeek'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisMonth'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisYear'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedToday'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisWeek'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisMonth'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisYear'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedToday'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisWeek'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisMonth'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisYear'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedToday'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisWeek'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisMonth'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisYear'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedToday'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisWeek'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisMonth'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisYear'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedToday'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisWeek'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisMonth'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisYear'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedToday'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisWeek'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisMonth'<br />Warning (Code 1292): Truncated incorrect DOUBLE value: 'T.usedThisYear'</span><br />
<span style="font-family: Courier New; font-size: xx-small;"></span><br />
<span style="font-family: inherit;">From what I have been able to find online about this warning, it appears to happen for some people who didn't us quotes on their names (which I use everywhere). Now why would a parser give such a warning for quote usage? </span><br />
<br />
LAMEOTECH I say!<br />
<br />
<span style="color: red;">Answer:</span><br />
<span style="color: black;">My son correctly pointed out that I was quoting my column names (a no no I guess, with no help from the parser) and referencing aliases outside the GROUP BY, HAVING, and ORDER BY clauses (also no help from the parser).</span><br />
The correct query becomes:<br />
<div style="background-color: white; color: black; font-family: "Courier New"; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none;">
<pre><span style="background-color: #d8d8d8; color: green; font-style: italic;">SELECT </span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;">`linkId`,</span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;">SUM(T.usedToday)ascountToday,</span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;">SUM(T.usedThisWeek)as countThisWeek,</span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;">SUM(T.usedThisMonth)as countThisMonth,</span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;">SUM(T.usedThisYear)as countThisYear</span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;">FROM</span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;">(</span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;"> SELECT `linkId`, </span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;"> TIMEDIFF(`whenUsed`, `whenRendered`) as URDiff, </span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;"> DATEDIFF(`whenUsed`, UTC_TIMESTAMP()) as `dateDiff`,</span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;"> if(DATEDIFF(`whenUsed`, UTC_TIMESTAMP()) = 0, 1, 0)as usedToday,</span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;"> if(DATEDIFF(`whenUsed`, UTC_TIMESTAMP()) < 8 AND DATEDIFF(`whenUsed`, UTC_TIMESTAMP()) > 0, 1, 0)as usedThisWeek,</span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;"> if(DATEDIFF(`whenUsed`, UTC_TIMESTAMP()) < 31 AND DATEDIFF(`whenUsed`, UTC_TIMESTAMP()) > 7, 1, 0) as usedThisMonth, </span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;"> if(DATEDIFF(`whenUsed`, UTC_TIMESTAMP()) < 365 AND DATEDIFF(`whenUsed`, UTC_TIMESTAMP()) > 30, 1, 0) as usedThisYear</span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;"> FROM `links` </span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;"> WHERE MINUTE(TIMEDIFF(`whenUsed`, `whenRendered`)) < 15 AND HOUR(TIMEDIFF(`whenUsed`, `whenRendered`)) = 0</span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;"> AND `pageId` = 1</span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;">) as T</span>
<span style="background-color: #d8d8d8; color: green; font-style: italic;">GROUP BY `linkId` </span></pre>
<pre> </pre>
<pre><span style="background-color: #d8d8d8; font-family: Times New Roman; font-size: small;">With a cheery results of:</span>
</pre>
</div>
<br />
<span style="font-family: "Courier New", Courier, monospace; font-size: xx-small;">+--------+--------------+---------------+----------------+---------------+<br />| linkId | ascountToday | countThisWeek | countThisMonth | countThisYear |<br />+--------+--------------+---------------+----------------+---------------+<br />| 3 | 1 | 0 | 0 | 0 |<br />| 6 | 1 | 0 | 0 | 0 |<br />| 7 | 2 | 0 | 0 | 0 |<br />| 8 | 2 | 0 | 0 | 0 |<br />| 9 | 3 | 0 | 0 | 0 |<br />| 11 | 1 | 0 | 0 | 0 |<br />+--------+--------------+---------------+----------------+---------------+</span></span><br /></span><br /></div>
Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com4tag:blogger.com,1999:blog-8768144104280624268.post-62659093491751547602013-01-25T10:02:00.000-08:002013-01-25T10:02:56.045-08:00Where the real power of computers lies - raw text<div dir="ltr" style="text-align: left;" trbidi="on">
There are two things that really drive computers:<br />
<ol>
<li>Conventions/Standards</li>
<li>Raw Text</li>
</ol>
Almost every PC operation (with the exception of UI rendering of images, controls and sound) ultimately use simple raw text as the true container for information. These simple text messages are sent across your machine and the Internet to transfer information.<br />
Many times data is stored in a binary form and there are complex protocols for transferring and interpreting data, but really, when you unpack everything and see where it is ultimately used, it is generally just text.<br />
Even the languages used to express programs consist of text.<br />
This is because text embodies human-readable and interpretable information. It is the ability of humans to read text that ultimately gives text its value and capacity to hold information.<br />
This is a significant point which I think our modern gadget/image/sound driven world is forgetting as they design software.<br />
Many times I see information (ultimately in the form of simple text of course), packaged into forms that are difficult to extract. Even UI that presents information to you on say a web page or a PDF file often can prevent the extraction of the raw text for transfer to other places.<br />
Just think about it. Where would you be with out Cut/Copy and Paste? The clipboard is probably the most-used feature of any GUI. In the old command line days (still alive and well today) it was the ability to pipe text between commands that gave UNIX and DOS users the power to take disparate tools and combine them efficiently to perform complex tasks.<br />
Can you imagine where we would be without piping and clipboards?<br />
With standards like UTF-8 there just aren't any more excuses. We can pass virtually all information in human-readable text and have the most efficient systems possible.<br />
So here's my tip for the day - are you coding up tons of UI or interface code just to ultimately get some text across a wire or into another program or across to a user? If so, you may be approaching your problem wrong.</div>
Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0tag:blogger.com,1999:blog-8768144104280624268.post-5198728057259460752013-01-08T19:58:00.000-08:002013-01-08T19:58:59.790-08:00Ideas on building software<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">Over my many years of programming time, I have often had ideas on how the tools should be made to make building software more efficient and pleasurable.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">There have been lots of advances over the years but I, being the old fart that I am, still think very highly of <span style="background-color: white; line-height: 19.200000762939453px;"><a href="http://en.wikipedia.org/wiki/K%26R">Kernighan and Ritchie</a></span><span style="background-color: white; line-height: 19.200000762939453px;">,</span> and their first OS.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">I long for the days of simplicity.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">The creation of the IDE (Integrated Development Environment) is more of a boon to software companies wanting to rope developers into their pet APIs of choice. After all, there is only so much a developer can learn so if you can keep him doing things your way you can sell him software forever.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">There is so much creativity out there it's quite hard to corral these guys into a single paradigm, but for most it has been done.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">I admit there is synergy in having a bunch of programmers all working on the same language and tools, I'm not against that, but I am against a single paradigm being boxed up and shoved down your throat - you want to work differently, then make your own tools.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">The openness of a simple compiler, linker and make system I still like best. The tools are individually comprehensible and manageable - especially if the input and output are mostly text files.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">I wish they had gone further in developing the multi-phased approach to building software.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">Here's a list of the parts I see as being nice to have separated and individually accessible:</span><br />
<b style="font-family: Arial, Helvetica, sans-serif;">A Pre-compile Phase Macro Package</b><br />
<span style="font-family: Arial, Helvetica, sans-serif;">The old C compiler had this built in which you could utilize by invoking a build so you could see the output for help with buggy macros. But I think such an intermediate file is actually quite useful to have in the build process as a separate phase of the process.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">It is incredibly useful to place things in one place and have other files build from those definitions in different ways. Maybe you have common constants you want to use across php, javascript, C and SQL. Maybe you have some key core data that would really speed things up if it were hard-coded in each layer of your distributed design. Keeping things identical can only be done easily if the parts are derived from a single source combined with formatting or other options to create the output.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">These pre-compiled output files can themselves become checked-in source that is only rarely built when the core definitions change. Why precompile EVERY time right?</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b>File Dependency Modules</b></span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">The real nightmare of make-files is keeping dependencies straight. When done manually, they create a kind of straight-jacket that eventually ties you in knots. I envision tools that inspect the source tree for how files are related. It could be as simple as looking for #Include statements but it could get quite sophisticated as well. Imagine just building each function in a separate file with no references to any headers or other modules of your code. The dependency tool simply figures out based on the symbolic analysis of the modules what files it depends on. Of course the modules would be language specific but they could also be invoked further down the build process like at link-time. The output of these tools would be dependency description files. Date/Time stamps can be used to optimize only re scanning things that changed and naturally, these intermediate files can be checked-in as well.</span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;"><b>File location based on dependencies</b></span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">I have long thought of this as one of my cooler ideas. Suppose you had a set of directories titled Layer0, Layer1, ... where Layer0 constitutes all the base OS APIs you have at your disposal - things that you know will always be there and you can't change. Above that in Layer1 is only code that depends on Layer0 code. Linking this code need know nothing above Layer1 to work. Layer2 is just code that depends on Layer1 and lower code, etc.</span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">If you make a change that adds a dependency to an equal or higher layer, the file gets moved to the higher layer automatically, or a warning gets issued and it won't build till you put it in the right place.</span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">Programmers become very aware of how their changes effect the dependencies of a project and they instinctively know that the lower order layers are likely simpler and faster bits of code.</span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">I would think such a system will have a natural ordering to it that will promote faster and better factored code.</span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;"><b>Compilers to a common AST structure</b></span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">An AST stands for Abstract Syntax Tree and is an internal structure that compilers use as an intermediate form of the code as it parses the source code. What if you could output the AST in text form? You could see how the parser is interpreting your code and errors would be much better understood if you could see the associated AST. What is nice is that this intermediate form of the build process could also be used to help editors do smarter editing and syntax errors would have so much information to present on a problem as to make it very clear, most likely, what is wrong without needing to create really great error messages for the problems.</span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">What is even more powerful is the ability to write parsers for multiple languages that output the exact same AST format. Now we have cross-language support without runtime or target machine dependencies!</span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">And, as suggested in other areas of this article, the AST files could also be checked in and the re-parsing of unchanged files skipped in the build process.</span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;"><b>AST to target object compilers</b></span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">The next phase involves taking input from the AST files and building linkable objects or IL (Intermediate Language) output files. It's not a long move from AST form to IL or Linkable form - it could be a very fast process. Optimization options go in this phase of processing I should think.</span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;"><b>Run-Time and Link-Time tools</b></span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">I recall trying to better understand .obj files sometimes to help me understand link dependencies better. We just didn't have the tools. But it seems at this point one could start testing, profiling and debugging your code before its even compiled into final form. Unreachable code could be found and dependencies analyzed here. These tools could feed back into the file location based dependencies by noting where and how many link ends there are. Graphical models could be constructed to see dependencies across modules and suggestions made on better ways to pull parts together into modules.</span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;"><b>Final Compilation and post compilation optimization</b></span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">Another pass can be used to construct stand alone .exes or .dlls or IL assemblies. Here is where massive configuration options can be used for proper packaging.</span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">I have always hated COM because of the way it forces you to create so many layers of overhead that you might never really need. COM has a great way of abstracting things out so you treat everything the same but many times its just not needed. I have often wish I had the choice of how to connect with other code - use COM with IDispatch interfaces, use COM with core interfaces, use direct DLL export linking, or just paste the code into my code. These are all legitimate ways to go, I wish I had a world where I could just use all of them together and change them as needed.</span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;"><b>Build analysis tools</b></span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">How long did each phase of the build of parts of a big project take? How many times did the same module have to be linked in for others to use? Can I see a dependency map of all parts of the process from start to finish?</span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;"><b>Graphical Programming</b></span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">Finally, the ultimate dream - building software like legos. If there were a nice way to represent code via a hierarchy of ORM models with different shaped knobs on them to represent interfaces. You pick up a piece and you instantly see a list of other parts it can connect to and you just graphically drag them together to form a new part.</span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">It's all a dream but some ideas that I hope might inspire someone to think of a way to do this better.</span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;">I'm not a compiler writer so I can't really claim any real expertise here, but it just seems we could do things better.</span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;"><b><br /></b></span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<br />
<div style="text-align: left;">
<span style="font-family: Arial, Helvetica, sans-serif;"><b><br /></b></span></div>
</div>
</div>
Sandy Staabhttp://www.blogger.com/profile/16278458184672178465noreply@blogger.com0