First, let me say that I AM a Glass explorer and I'm also KickStarter backer #1 for Meta. I've also been working with just about every stereoscopic tech you can think of over the last 15 years (I'm a backer for Oculus Rift, was using LCD Shutter Glasses back in '97, used to DRAW stereoscopic images by hand as a child, wrote my own "Magic Eye" app in DOS 6 using qbasic at the age of 15, etc...)
I feel like I've been talking to walls the last year but here it is said better than I have been able to word it so far. The CEO of Meta (SpaceGlases, Meta-View) Meron Gribetz, the man that hired Steve Mann (a top authority on wearable computing) and Steven Feiner (credited with coining the term augmented reality), says in very simple terms that Glass is not AR so don't take my word for it. To understand how much of an authority Meta is on AR, make sure you know who Steve Mann and Steven Feiner are and then understand that the CTO for Meta has been working with Mann for more than 10 years.
"The 3D output allows you of course allows you to paint graphics on regions of interest in the real world; *TRUE* augmented reality"
"The modern definition of augmented reality; the ability to take digital information and register it to parts of the real world."
"Glass is a Notification Machine"
Glass is a HUD which can be manipulated to provide some VERY BASIC AR-LIKE behavior. That doesn't make it AR any more than a the Nintendo Virtual Boy was VR. That's not to call Glass inferior in any way. Glass just wasn't intended for AR applications. Eventually technology will get to a point where a real AR display like Meta will be useful for something like Glass (lightweight, unobtrusive, wireless, decent battery life; everything Meta is trying to improve right now but falls far short in compared to Glass). With its present design, Glass will never be real AR; no stereoscopy, no direct fov, no 3D tracking, almost nothing that would allow it to convincingly "augment reality" any more than your smartphone currently can. If you're going to call Glass an AR device, then so is ANY smartphone with a camera on the back of a screen. If anything, your phone is MORE appropriate for AR than Glass.
This is the man who will bring AR mainstream and who presently employs the two TOP authorities on AR. He validates what I've been saying since Glass was released. I hate to even mention Glass and AR in the same topic because I don't want to perpetuate the confusion but to clarify, I must do so.
Clarification: Based on a question just posed to me elsewhere, I came up with the following clarification.
The reason I'd more readily call a smartphone AR hardware is because of the fact that you can move the display in your line of sight and it will then (in general) have a camera pointed where your eyes do. Glass intentionally places the display above and to the side of your primary visions so immediately it cannot be in your direct field of view. It does have a camera facing forward with a huge FOV though so the display can be aligned with the camera. It might be a fine distinction, but that's why I say that it's isn't AR but has AR-like ability. You could call a car a bus because it can carry many passengers, but it's still not a bus, it's a car and the difference might seem insignificant, but only until you need a bus (something that does what the name implies). Furthermore, to "augment reality", you must have some reasonably level of belief that your reality has been augmented. As the Oculus Rift has proven, just putting a display in front of you does not accomplish this. Certain things like stereoscopic vision and latency are FAR more important than just having a display. A phone has a larger, higher resolution display that can easily take up a large portion of your primary FOV which is critical to AR. Add an auto-stereoscopic display (EVO 3D or Nintendo 3ds), and you'd also gain stereoscopic vision and with that, be much close to what AR needs to "augment reality" as opposed to just superimposing images into space. Glass has an interesting phenomenon where the display size is entirely dependant on what you see behind it. Because no stereoscopic cues are provided, the only way to make it even remotely believable is perfect scaling of the virtual image of the real one, something next to impossible with only the one camera. The Evo 3D has 2 cameras and so would be that much closer STILL to being a useful AR device but it falls far short in one way that Glass doesn't (not entirely anyway) and that is keeping your hands free so you can interact with reality. A major difference between superimposing graphics and AR is the fact that you not only could believe at some level that your reality has been augmented (not just projected over), but that you can still interact with your reality. That rules out the "phone as AR hardware" idea. So to sum it up, AR must make your reality appear to have changed (not just a projection) and you must be able to interact with that augmented reality. The primary difference between VR and AR is the fact that VR disconnects you from reality. Even with various hand-sensors, VR wouldn't be AR. Similarly, a HMD (head mounted display, like Glass and similar devices) will never be AR. The only real common thread is a see-through, head mounted display (HMD).
Thursday, January 30, 2014
Saturday, December 14, 2013
Chrome Dev Tools - Code Collapsing / Folding in Source Editor On Its Way!
I should be able to highlight some code or act on an entire file by hitting a keyboard shortcut (I'm accustomed to Ctrl-M, Ctrl-M to collapse/expand a selected chunk) and have that code visually collapse to just the definition/signature line and a + show up on the left side of the IDE which I could click to re-expand that collapsed piece of code. Ideally, collapsing would also work anywhere there are mandatory closing symbols on a separate like (such as each/while/do/if/else/etc...)
What went wrong? The behavior just doesn't exist as of right now that I can find.
Did this work before? No
How to solve the issue? Ask the Chrome Dev Team to implement it via the bug submitted below :)
The value of this behavior is evident when you consider how often it appears elsewhere even in Chrome (any collapsable treeview demonstrates this). Elements tab does it, all the tabs in the right-pane of Elements (Styles, Computed, Event Listeners, etc..) also do it. Nearly every major IDE does it (Netbeans, VIM, Eclipse, Visual Studio, etc..)
This is extremely valuable to me when working with larger code files to the extent that I'm still using other IDEs instead of DevTools when working with larger or more complex files.
If you're not familiar with this behavior somehow, http://vimeo.com/4020903 does a great job at showing the behavior, some potentially configurable options and perhaps a pattern to emulate since it's VIM and oss.
If you like the idea, go vote (not sure if it matters now, but it can't hurt) by clicking the star at the top left of the bug report below.
What went wrong? The behavior just doesn't exist as of right now that I can find.
Did this work before? No
How to solve the issue? Ask the Chrome Dev Team to implement it via the bug submitted below :)
The value of this behavior is evident when you consider how often it appears elsewhere even in Chrome (any collapsable treeview demonstrates this). Elements tab does it, all the tabs in the right-pane of Elements (Styles, Computed, Event Listeners, etc..) also do it. Nearly every major IDE does it (Netbeans, VIM, Eclipse, Visual Studio, etc..)
This is extremely valuable to me when working with larger code files to the extent that I'm still using other IDEs instead of DevTools when working with larger or more complex files.
If you're not familiar with this behavior somehow, http://vimeo.com/4020903 does a great job at showing the behavior, some potentially configurable options and perhaps a pattern to emulate since it's VIM and oss.
If you like the idea, go vote (not sure if it matters now, but it can't hurt) by clicking the star at the top left of the bug report below.
Friday, December 13, 2013
Another from Tony - How Babies Are [NOT] Made
Wish I'd have thought of this with both my children. Priceless!
How Babies are Made - Who Knew
Canadian photographer Patrice Laroche surely will have no trouble explaining to his kids about the birds and the bees.
During his wife Sandra’s pregnancy, the artist created this hilarious explanatory photo series titled “How to Make a Baby”...
The creative couple planned and carried out their project throughout the whole period of 9 months, taking pictures in the exact same settings as Sandra’s belly expanded.
The pregnancy saga of Sandra and Patrice basically denounces all the traditional cabbage and the stork stories.
Monday, December 9, 2013
AirTame - Screencasting to HDMI - Wifi Bridge - Chromecast companion (not a competitor) That I'm Definitely Investing In
I just learned about a upcoming and very interesting product called AirTame (currently funding on indiegogo.com).
I think the description is a bit misleading, but if you consume media from a computer (Windows, OSX, Linux) and use HDMI, it's worth a good look. Likely has some serious Mobile device potential to follow.
I don't agree with their comparison with ChromeCast (especially due to its price and lack of built-in apps) and in fact, will travel with both dongles once I have AirTame but as much because of its value as a network appliance as anything.
It's basic purpose is to broadcast your computer screen to a small HDMI dongle which I like the idea of, but that's not even where it REALLY shines for me.
I have Google Glass, an Android phone, an Android tablet, a laptop, a Chromebook Pixel, multiple Eye-Fi cards and Google ChromeCast with me when I travel. Configuring (and reconfiguring) all these devices to deal with the captive portals that almost always exist while I travel (AirPort, conferences, hotels, etc..) is a real PITA. What's worse is that some devices like my Glass, ChromeCast and my Eye-Fi cards cannot use them due to the captive portals (well, not without some serious monkey business anyway).
AirTame is actually a small networking appliance with hardware media decoders and has TWO WiFi systems so it can act as a Wireless Bridge (be an AP and client at the same time) which means that you connect to it then tell it how to connect to other WiFi networks then it acts as a NAT Router allowing you to configure all your devices to one, well-known device then you only have to configure and manage that one device as you travel. As a result, you get Wifi that's useful to you anywhere you can get it connected to Wifi.
This means that I can now connect my laptop to a TV in the hotel room and also use ChromeCast and Glass where I previously couldn't (without a good bit of hacking anyway) AND all my other devices will "just work" as I'm accustomed to. A side benefit is that it is managing traffic and can prioritize for streaming media.
Since Airtame can be powered by through HDMI MHL OR external USB, I'm betting that I could power it up without having the HDMI plugged in and still get the WiFi Bridge behavior I want (good for the airport), powered off a portable charger even (battery or solar and not even need A/C).
All that AND it's only $89 for one or $169 for two (more options available on their indiegogo campaign). For the networking potential alone in such a small, battery-powered system (using USB and portable chargers), I'd say it's well worth the price. Add the screen casting (especially if the latency is decent in the real world) and it's a steal. If they do some decent Android integration (something like ChromeCast, Miracast, Cheapcast functionality), it's a no-brainer for many, but especially those of us to travel constantly and find ourselves stranded by captive portals.
I'm going to see about a review loaner so keep an eye out for more info.
I think the description is a bit misleading, but if you consume media from a computer (Windows, OSX, Linux) and use HDMI, it's worth a good look. Likely has some serious Mobile device potential to follow.
I don't agree with their comparison with ChromeCast (especially due to its price and lack of built-in apps) and in fact, will travel with both dongles once I have AirTame but as much because of its value as a network appliance as anything.
It's basic purpose is to broadcast your computer screen to a small HDMI dongle which I like the idea of, but that's not even where it REALLY shines for me.
I have Google Glass, an Android phone, an Android tablet, a laptop, a Chromebook Pixel, multiple Eye-Fi cards and Google ChromeCast with me when I travel. Configuring (and reconfiguring) all these devices to deal with the captive portals that almost always exist while I travel (AirPort, conferences, hotels, etc..) is a real PITA. What's worse is that some devices like my Glass, ChromeCast and my Eye-Fi cards cannot use them due to the captive portals (well, not without some serious monkey business anyway).
AirTame is actually a small networking appliance with hardware media decoders and has TWO WiFi systems so it can act as a Wireless Bridge (be an AP and client at the same time) which means that you connect to it then tell it how to connect to other WiFi networks then it acts as a NAT Router allowing you to configure all your devices to one, well-known device then you only have to configure and manage that one device as you travel. As a result, you get Wifi that's useful to you anywhere you can get it connected to Wifi.
This means that I can now connect my laptop to a TV in the hotel room and also use ChromeCast and Glass where I previously couldn't (without a good bit of hacking anyway) AND all my other devices will "just work" as I'm accustomed to. A side benefit is that it is managing traffic and can prioritize for streaming media.
Since Airtame can be powered by through HDMI MHL OR external USB, I'm betting that I could power it up without having the HDMI plugged in and still get the WiFi Bridge behavior I want (good for the airport), powered off a portable charger even (battery or solar and not even need A/C).
All that AND it's only $89 for one or $169 for two (more options available on their indiegogo campaign). For the networking potential alone in such a small, battery-powered system (using USB and portable chargers), I'd say it's well worth the price. Add the screen casting (especially if the latency is decent in the real world) and it's a steal. If they do some decent Android integration (something like ChromeCast, Miracast, Cheapcast functionality), it's a no-brainer for many, but especially those of us to travel constantly and find ourselves stranded by captive portals.
I'm going to see about a review loaner so keep an eye out for more info.
Thursday, December 5, 2013
Why soldiers should be old men and not young ones
Credit to my buddy TonyM. He always send the funniest .... (the large font is for he and his other legally blind buddies that don't rely on screen-readers)
This is funny & obviously written by a Former Soldier... The New Direction for any war.
I am over 60 and the Armed Forces think I am too old to track down terrorists. You cannot be older than 42 to join the military. They have the whole thing ass-backwards.
Instead of sending 18-year olds off to fight, they ought to take us old guys. You should not be able to join a military unit until you are at least 35.
For starters, researchers say 18-year-olds think about sex every 10 seconds. Old guys only think about sex a couple of times a month, leaving us more than 280,000 additional seconds per day to concentrate on the enemy.
Young guys have not lived long enough to be cranky, and a cranky soldier is a dangerous soldier. 'My back hurts! I can't sleep, I'm tired and hungry.'
We are bad-tempered and impatient, and maybe letting us kill some asshole that desperately deserves it will make us feel better and shut us up for a while...
An 18-year-old doe’s not even like to get up before 10am. Old guys always get up early to pee, so what the hell.
Besides, like I said, I am tired and cannot sleep and since I am already up, I may as well be up killing some fanatical son-of-a-bitch.
If captured we could not spill the beans because we would forget where we put them. In fact, name, rank, and serial number would be a real brainteaser.
Boot camp would be easier for old guys...
We are used to being screamed and yelled at and we are used to soft food. We have also developed an appreciation for guns.
We have been using them for years as an excuse to get out of the house, away from the screaming and yelling.
They could lighten up on the obstacle course however... I have been in combat and never saw a single 20-foot wall with rope hanging over the side, nor did I ever do any pushups after completing basic training.
Actually, the running part is kind of a waste of energy, too... I have never seen anyone outrun a bullet.
An 18-year-old has the whole world ahead of him. He is still learning to shave, to start a conversation with a pretty girl. He still has not figured out that a baseball cap has a brim to shade his eyes, not the back of his head.
These are all great reasons to keep our kids at home to learn a little more about life before sending them off into harm's way.
Let us old guys track down those terrorists.
The last thing an enemy would want to see is a couple million pissed off old farts with bad attitudes and automatic weapons, who know that their best years are already behind them.
HEY! How about recruiting Women over 50...in menopause! You think MEN have attitudes.
Ohhhhhhhhhhhh my God! If nothing else, put them on border patrol. They will have it secured the first night!
You may want to send this to all of your senior friends...in big type so they can read it.
This is funny & obviously written by a Former Soldier... The New Direction for any war.
I am over 60 and the Armed Forces think I am too old to track down terrorists. You cannot be older than 42 to join the military. They have the whole thing ass-backwards.
Instead of sending 18-year olds off to fight, they ought to take us old guys. You should not be able to join a military unit until you are at least 35.
For starters, researchers say 18-year-olds think about sex every 10 seconds. Old guys only think about sex a couple of times a month, leaving us more than 280,000 additional seconds per day to concentrate on the enemy.
Young guys have not lived long enough to be cranky, and a cranky soldier is a dangerous soldier. 'My back hurts! I can't sleep, I'm tired and hungry.'
We are bad-tempered and impatient, and maybe letting us kill some asshole that desperately deserves it will make us feel better and shut us up for a while...
An 18-year-old doe’s not even like to get up before 10am. Old guys always get up early to pee, so what the hell.
Besides, like I said, I am tired and cannot sleep and since I am already up, I may as well be up killing some fanatical son-of-a-bitch.
If captured we could not spill the beans because we would forget where we put them. In fact, name, rank, and serial number would be a real brainteaser.
Boot camp would be easier for old guys...
We are used to being screamed and yelled at and we are used to soft food. We have also developed an appreciation for guns.
We have been using them for years as an excuse to get out of the house, away from the screaming and yelling.
They could lighten up on the obstacle course however... I have been in combat and never saw a single 20-foot wall with rope hanging over the side, nor did I ever do any pushups after completing basic training.
Actually, the running part is kind of a waste of energy, too... I have never seen anyone outrun a bullet.
An 18-year-old has the whole world ahead of him. He is still learning to shave, to start a conversation with a pretty girl. He still has not figured out that a baseball cap has a brim to shade his eyes, not the back of his head.
These are all great reasons to keep our kids at home to learn a little more about life before sending them off into harm's way.
Let us old guys track down those terrorists.
The last thing an enemy would want to see is a couple million pissed off old farts with bad attitudes and automatic weapons, who know that their best years are already behind them.
HEY! How about recruiting Women over 50...in menopause! You think MEN have attitudes.
Ohhhhhhhhhhhh my God! If nothing else, put them on border patrol. They will have it secured the first night!
You may want to send this to all of your senior friends...in big type so they can read it.
Chrome Dev Tools moves Rendering tab and its children such as "Show potential scroll bottlenecks"
Not sure if the beta channel will be effected, but for those bleeding edge web developers running Canary and following tips from rather smart people like +Paul Irish (since May or so), there is a VERY nice tool available in the Rendering options called "Show potential scroll bottlenecks". Recently I needed to turn it back off and couldn't find it or the rest of the Rendering section that was previously in the Dev Tools option dialog.
Thanks to some rather argumentative people in #chromium-support on FreeNode, I did eventually find where it moved to and explained that many of us might find it a bit too hidden considering the publicity it's seen, but apparently the powers that be have their reasons so I wanted to do my best to make sure everyone knows where it went. I'm including a screenshot below to clarify but you must open the "Console Drawer" (where you find the new emulation tab also) and you will find the Rendering tab.
P.S. If anyone know of a Chrome option/extension/start-up-switch/etc.. that might be responsible for that red tint you see, I'd love to hear about it. It's ONLY happening to Chrome, happens on all 4 of my monitors, and occasionally doesn't affect context menus but I cannot figure out the cause.
UPDATE: If you don't see the Rendering tab, go to your DevTools settings and check "Show 'Rendering' view in console drawer."
G+ Post
Labels:
chrome
,
chromedevtools
,
chromium
Saturday, November 2, 2013
Verizon Corruption, ISIS and Google Wallet
This is a post from XDA today where I addressed someone with good intentions who is supporting ISIS and trying to defend their decision. Original thread HERE.
........
I decided to go ahead and check my facts, and yep; they're all still valid and nothing you've said changes that.
Also, NOBODY is left with ONLY the option of using ISIS. They can do like 99.999999% of the population and use cards... OR they can encourage behavior that will further enable a major communications company already well known for abusing their customers to continue doing so.
As for your point about Apple, you're off base there too because Apple doesn't even have enough market share to have such an effect any more and even if they did, they'd come out with their own 'Isis' and watch everyone (including Verizon) bend over and take it. Of course, even Verizon has enough grey matter to keep themselves from that situation so..... it's not going to happen genius.
Your logic is about as strong as something my 3-year old might try on me and it will get about the same response; a condescending tone and then ignored politely with a forced smile. Wanna guess which step we're on now?
By the way, if you think that's raging, you might be a bit on the sensitive side, but if you'd like I can start using a more gentle tone and words just for you. I think I can recall those days from before the Corps reconditioned me (decades ago)
For the logic and/or mathematically challenged, I've gone ahead and compiled some facts of interest to the topic at hand and to explain why ANYONE supporting ISIS in any way is in the minority and only hurting everyone else.
I'd like to think that the numbers and facts speak for themselves here.
........
I decided to go ahead and check my facts, and yep; they're all still valid and nothing you've said changes that.
Also, NOBODY is left with ONLY the option of using ISIS. They can do like 99.999999% of the population and use cards... OR they can encourage behavior that will further enable a major communications company already well known for abusing their customers to continue doing so.
As for your point about Apple, you're off base there too because Apple doesn't even have enough market share to have such an effect any more and even if they did, they'd come out with their own 'Isis' and watch everyone (including Verizon) bend over and take it. Of course, even Verizon has enough grey matter to keep themselves from that situation so..... it's not going to happen genius.
Your logic is about as strong as something my 3-year old might try on me and it will get about the same response; a condescending tone and then ignored politely with a forced smile. Wanna guess which step we're on now?
By the way, if you think that's raging, you might be a bit on the sensitive side, but if you'd like I can start using a more gentle tone and words just for you. I think I can recall those days from before the Corps reconditioned me (decades ago)
For the logic and/or mathematically challenged, I've gone ahead and compiled some facts of interest to the topic at hand and to explain why ANYONE supporting ISIS in any way is in the minority and only hurting everyone else.

I'd like to think that the numbers and facts speak for themselves here.
Friday, November 1, 2013
How to run an IISNODE (node.js for IIS) app in a virtual directory OR how to build a node.js app that works regardless of virtual directories in IIS
How's THAT for a lengthy title?
I spent more time than I care to admit trying to figure out how to get an existing node.js app running in a virtual directory on IIS. The entire reason I set out to use node on IIS was to be able to use it inside an existing asp.net app and that meant either a sub-app or a virtual directory and in this case, the latter seemed the better (easier) choice but the virtual directory name was causing reference issues for "Dynamic" requests (actual node.js app files).
The solution turns out to be well addressed, at least for "express" framework apps using app.use()
When you call app.use(app.router), you can pass a namespace prefix for your virtual directory and then requests will succeed BUT who would want to hard-code their virtual directory name into their app [yuck!]?
The solution turns out to be quite simple because IISNODE promotes appSettings to environment variables. Taking advantage of this fact, you can add an entry to the apps web.config such as:
Then you can make one simple modification to your server.js file like this:
This way your app is flexible but not even tied to the existence of the environment variable let alone its value UNLESS you want it to be and even then, the variable is local to the app (not really an environment variable).
I'm still working on the static requests and will update this post when I nail that. From what I'm reading everywhere, it should be as simple as updating the relevant rewrite rule but so far it seems that the rule isn't being applied so the settings are irrelevant. I'm still trying to determine why but I'm not quite competent with URLRewrite. Below is what I currently have.
My virtual directory is "nodetest"
~/public/stylesheets/style.css exists
/nodetest/stylesheets/style.css returns "Cannot GET /nodetest/stylesheets/style.css"
/nodetest/public/stylesheets/style.css returns the expected CSS
I spent more time than I care to admit trying to figure out how to get an existing node.js app running in a virtual directory on IIS. The entire reason I set out to use node on IIS was to be able to use it inside an existing asp.net app and that meant either a sub-app or a virtual directory and in this case, the latter seemed the better (easier) choice but the virtual directory name was causing reference issues for "Dynamic" requests (actual node.js app files).
The solution turns out to be well addressed, at least for "express" framework apps using app.use()
When you call app.use(app.router), you can pass a namespace prefix for your virtual directory and then requests will succeed BUT who would want to hard-code their virtual directory name into their app [yuck!]?
The solution turns out to be quite simple because IISNODE promotes appSettings to environment variables. Taking advantage of this fact, you can add an entry to the apps web.config such as:
<appSettings>
<add key="appvirtdir" value="/nodetest" />
</appSettings>
<add key="appvirtdir" value="/nodetest" />
</appSettings>
Then you can make one simple modification to your server.js file like this:
app.configure(function () {
....
app.use(process.env.appvirtdir || '', app.router);
....
});
....
app.use(process.env.appvirtdir || '', app.router);
....
});
This way your app is flexible but not even tied to the existence of the environment variable let alone its value UNLESS you want it to be and even then, the variable is local to the app (not really an environment variable).
I'm still working on the static requests and will update this post when I nail that. From what I'm reading everywhere, it should be as simple as updating the relevant rewrite rule but so far it seems that the rule isn't being applied so the settings are irrelevant. I'm still trying to determine why but I'm not quite competent with URLRewrite. Below is what I currently have.
My virtual directory is "nodetest"
~/public/stylesheets/style.css exists
/nodetest/stylesheets/style.css returns "Cannot GET /nodetest/stylesheets/style.css"
/nodetest/public/stylesheets/style.css returns the expected CSS
<rewrite>
<rules>
<rule name="LogFile" patternSyntax="ECMAScript" stopProcessing="true">
<match url="^(?:[a-zA-Z0-9_\-]*/)*[a-zA-Z0-9_\-]+\.js\.logs\/\d+\.txt$" />
</rule>
<rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
<match url="^server.js\/debug[\/]?" />
</rule>
<rule name="StaticContent" patternSyntax="Wildcard">
<action type="Rewrite" url="public/{R:0}" logRewrittenUrl="true" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<match url="*.*" />
</rule>
<rule name="DynamicContent">
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True" />
</conditions>
<action type="Rewrite" url="server.js" />
</rule>
</rules>
</rewrite>
<rules>
<rule name="LogFile" patternSyntax="ECMAScript" stopProcessing="true">
<match url="^(?:[a-zA-Z0-9_\-]*/)*[a-zA-Z0-9_\-]+\.js\.logs\/\d+\.txt$" />
</rule>
<rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
<match url="^server.js\/debug[\/]?" />
</rule>
<rule name="StaticContent" patternSyntax="Wildcard">
<action type="Rewrite" url="public/{R:0}" logRewrittenUrl="true" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<match url="*.*" />
</rule>
<rule name="DynamicContent">
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True" />
</conditions>
<action type="Rewrite" url="server.js" />
</rule>
</rules>
</rewrite>
How to install Node.js on Windows and integrate with IIS
I've decided that it's time for me to look at using node.js on Windows because I want a JSON web service that will run inside IIS, using SQL Server and I've learned that node.js is now a first-class citizen on Microsoft platforms.
My goal is to develop a web service that can consume my SQL Server DBs natively and run inside IIS using Node.js for [theoretically] maximum performance.
My development platform (where I'll first run all these steps) is Windows 8.1 but as I understand it, this should all work from Windows 7 to 8.1 with virtually no differences. At this time, I'm using WPI 4.6.
This process will give you an environment where IIS uses url-rewrite to send all requests to server.js in the project folder and it will do the routing and then web.config uses the iisnode section to cause certain files/folders to get processed through node so that IIS is the web server and node is essentially the application processor.
The first step is to install Web Platform Installer (WPI). At present, this can be found at: http://www.microsoft.com/web/downloads/platform.aspx
WPI is essentially an IIS package manager but it does a LOT more than just manage packages. Using WPI, we will install WebMatrix which does even more than WPI (setup entire sites, with dependencies and provide a simplistic (yet still powerful) development tool that can then publish an entire site (with dependencies) to IIS AND run locally for development.
WPI is a 114KB download (web installer itself) that takes just a couple minutes to install and run.
First run will look something like the following except you may see newer packages (they're listed newest to oldest by default):
The next step is to simply use WPI to install WebMatrix. In reality, you can install WebMatrix directly (though I think that might install WPI anyway), but WPI is akin to NPM and you'll likely want it soon anyway.
At the top-right of WPI, in the search box, type "WebMatrix" and press enter/return. Find the latest version (currently 3) then click the "Add" button for it. Next, hit the "Install" button at the bottom.
I have a fairly fast connection (150Mb Cox Ultimate) and a fast machine so my install took about 20 seconds. When the install is complete, exit WPI and launch "Microsoft WebMatrix" from your Start Menu (or MetroUI if you've managed to live with it. I use StarDock's Start8 to give me back my start menu to and basically do away with metroUI).
Once you've launched WebMatrix (here-unto referred to as WM), deal with the Azure marketing content (I hit "not now" at the bottom right) and you're ready to setup a Node.js site.
Click the big "New" icon then "Template Gallery".
On the left, select "Node.js" template group then pick one of the templates. I'm using "Starter Site" for this tutorial. Next provide a "Site Name" at the bottom then click "Next".
As you click "Next" on the next few screens, the "magic" happens. ALL the dependencies are identified, downloaded, installed and configured rather than you having to locate all the compatible libraries, apps, modules, etc.. Just click "I accept" and sit back with WebMatrix does all the hard work. This will also install NPM by the way :)
This process will install "IISNode for Express" by default. If you are running full IIS (real development machine or server), you can now go back into WPI and search for and add "IISNode" to install the version for IIS, otherwise you now have a fully working Node.JS site ready to be opened in Visual Studio, run locally as-is, or published to an IIS Server.
OPTIONAL:
If you're running full IIS locally and want to deploy locally (or on a machine with IIS), then follow the steps below (found them HERE). Also, using WPI, install "IISNode for IIS (IIS exists)".
I still had some issues afterwards and one was resolved by opening "Programs and Features" from the control panel, searching for "Web Deploy", then click "Change" and select the deselected options (like the IIS extension).
UPDATE:
Of course, after taking the time to put this post together, while searching for Razor related content, I ran across the following (which is basically my post with follow-up related to Node.js code): http://www.microsoft.com/web/post/how-to-use-the-nodejs-starter-template-in-webmatrix
My goal is to develop a web service that can consume my SQL Server DBs natively and run inside IIS using Node.js for [theoretically] maximum performance.
My development platform (where I'll first run all these steps) is Windows 8.1 but as I understand it, this should all work from Windows 7 to 8.1 with virtually no differences. At this time, I'm using WPI 4.6.
This process will give you an environment where IIS uses url-rewrite to send all requests to server.js in the project folder and it will do the routing and then web.config uses the iisnode section to cause certain files/folders to get processed through node so that IIS is the web server and node is essentially the application processor.
The first step is to install Web Platform Installer (WPI). At present, this can be found at: http://www.microsoft.com/web/downloads/platform.aspx
WPI is essentially an IIS package manager but it does a LOT more than just manage packages. Using WPI, we will install WebMatrix which does even more than WPI (setup entire sites, with dependencies and provide a simplistic (yet still powerful) development tool that can then publish an entire site (with dependencies) to IIS AND run locally for development.
WPI is a 114KB download (web installer itself) that takes just a couple minutes to install and run.
First run will look something like the following except you may see newer packages (they're listed newest to oldest by default):
At the top-right of WPI, in the search box, type "WebMatrix" and press enter/return. Find the latest version (currently 3) then click the "Add" button for it. Next, hit the "Install" button at the bottom.
Once you've launched WebMatrix (here-unto referred to as WM), deal with the Azure marketing content (I hit "not now" at the bottom right) and you're ready to setup a Node.js site.
Click the big "New" icon then "Template Gallery".
This process will install "IISNode for Express" by default. If you are running full IIS (real development machine or server), you can now go back into WPI and search for and add "IISNode" to install the version for IIS, otherwise you now have a fully working Node.JS site ready to be opened in Visual Studio, run locally as-is, or published to an IIS Server.
OPTIONAL:
If you're running full IIS locally and want to deploy locally (or on a machine with IIS), then follow the steps below (found them HERE). Also, using WPI, install "IISNode for IIS (IIS exists)".
Here is the quick version of what I found that is more recent guidance and was enough for my demo:
Matt
- 1.Install Web Deploy 3.5 for Hosting Servers [using WPI]
- 2.Bounce IIS and IIS Manager [Restart IIS]
- 3.Configure the Management Service I used parts of this: http://blog.scnetstudio.com/post/2011/01/08/How-to-Configure-Windows-Server-2008-R2-to-support-Web-Deploy-(for-Web-Matrix).aspx
- 4.Install Web Matrix to another machine. (You cannot deploy to the local machine.) [Yes you can, you just can't deploy to 'localhost', you must use your machines FQDN]
- 5.Deploy from the machine in 4 to the machine configured in 3. [Which can be the same]
Matt
UPDATE:
Of course, after taking the time to put this post together, while searching for Razor related content, I ran across the following (which is basically my post with follow-up related to Node.js code): http://www.microsoft.com/web/post/how-to-use-the-nodejs-starter-template-in-webmatrix
Thursday, September 12, 2013
[RESOLVED] Windows 8 Remote Desktop Client Crash
I've been running Windows 8 in various forms as long as it's been available to MSDN subscribers and even with 8.1 about to release, MS has continually failed to address a major crash issue.
At first I figured it was a remnant of my forced upgrade from Windows 7 to 8 beta/preview/rtm etc. But when I started Googling in July of 2013, I discovered that I wasn't alone. Many were reporting issues with remote printers that could be resolved by either deselecting "Printers" on the "Local Resources" tab while others indicated that changing the default printer would help. Still others reported having to uninstall certain printer drivers.
Alas, these suggestions made no difference for me so I started digging. After downloading what I understood to be the Win7x64 binaries (turns out they weren't which was a blessing in disguise) and trying to run it with the same error, I gained a new perspective on the issue which was wrong, but still led me in the right direction.
Event viewer reported Event ID 1000 on Source Application Error. In the details I found the Faulting Application Path: %windir%\system32\mstsc.exe
I started investigating and discovered that hardlinks were being used (I have Link Shell Extension installed from http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html). When I executed the other enumerated file and got the same error but saw a different Faulting Application Path and the same Faulting application module (NTDLL.DLL), I started to suspect that the issue wasn't MSTSC itself so much as the context it was running it. The other path (specific to x64 install) was %windir%\WinSxS\amd64_microsoft-windows-t..minalservicesclient_31bf3856ad364e35_6.2.9200.16384_none_a6a5f4f9aadbc5f5 (this is where I had to adjust settings).
To cut to the chase, my suspicions led me to start playing with the compatibility settings and "Run As Administrator" and after thinking I had found the magical combination to run mstsc.exe at the amd64 specific path, I tried my "Remote Desktop Connection" start menu shortcut only to find that the error still existed.
UPDATE: Turns out that I had an instance running in the background and when I closed it, the crashes returned which led me to my final solution. Since I'd replaced my Start Menu shortcut, I had full permissions to modify the shortcut so I went to the compatibility tab and set "Run as Administrator" again and the crashes were once more gone. It appears the solution might be as simple as right-clicking your existing shortcut and using the Run as Administrator context menu item. Can anyone confirm it to be that simple or if the shortcut must be replaced to point directly to the instance under WinSxS?
In the end, I resolve the issue but can't even explain how. I CAN tell you what I did in general terms.
Somewhere in there the problem was resolved and even though I believe everything except the shortcut back to its original state, the problem has remained resolved.
I wish I had a cleaner solution and perhaps once I try to repeat the process on my laptop later I will have a better answer, but for now, this works for me. Even though MS hasn't resolved the problem in some years, I can no use Remote Desktop the way it was intended.
At first I figured it was a remnant of my forced upgrade from Windows 7 to 8 beta/preview/rtm etc. But when I started Googling in July of 2013, I discovered that I wasn't alone. Many were reporting issues with remote printers that could be resolved by either deselecting "Printers" on the "Local Resources" tab while others indicated that changing the default printer would help. Still others reported having to uninstall certain printer drivers.
Alas, these suggestions made no difference for me so I started digging. After downloading what I understood to be the Win7x64 binaries (turns out they weren't which was a blessing in disguise) and trying to run it with the same error, I gained a new perspective on the issue which was wrong, but still led me in the right direction.
Event viewer reported Event ID 1000 on Source Application Error. In the details I found the Faulting Application Path: %windir%\system32\mstsc.exe
I started investigating and discovered that hardlinks were being used (I have Link Shell Extension installed from http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html). When I executed the other enumerated file and got the same error but saw a different Faulting Application Path and the same Faulting application module (NTDLL.DLL), I started to suspect that the issue wasn't MSTSC itself so much as the context it was running it. The other path (specific to x64 install) was %windir%\WinSxS\amd64_microsoft-windows-t..minalservicesclient_31bf3856ad364e35_6.2.9200.16384_none_a6a5f4f9aadbc5f5 (this is where I had to adjust settings).
To cut to the chase, my suspicions led me to start playing with the compatibility settings and "Run As Administrator" and after thinking I had found the magical combination to run mstsc.exe at the amd64 specific path, I tried my "Remote Desktop Connection" start menu shortcut only to find that the error still existed.
UPDATE: Turns out that I had an instance running in the background and when I closed it, the crashes returned which led me to my final solution. Since I'd replaced my Start Menu shortcut, I had full permissions to modify the shortcut so I went to the compatibility tab and set "Run as Administrator" again and the crashes were once more gone. It appears the solution might be as simple as right-clicking your existing shortcut and using the Run as Administrator context menu item. Can anyone confirm it to be that simple or if the shortcut must be replaced to point directly to the instance under WinSxS?
I changed the owner of the amd_64_microsoft-windows-t..minalservicesclient_ folder to myself from TrustedInstaller.I granted myself FULL permission on the folder.I testedI changed compatibility settings and Run As Administrator on the WinSxS instance of MSTSC.exeI testedI undid the compatibility settings.I testedI replaced my Start Menu shortcutI testedI reverted owner to NT Service\TrustedInstallerI tested
Labels:
Crash
,
EventID 1000 Source Application Error mstsc
,
Microsoft Fail
,
MSTSC
,
Remote Desktop
,
Windows 8
Subscribe to:
Posts
(
Atom
)








