Friday, March 16, 2012

Kickstarter Gaming Division

Congrats to Double Fine on an awesome run on Kickerstarter! With 3,336,371 million, we will see one of the greats create an Adventure game: a genre that has almost completely died in a realm of cut-throat developers focusing only on games as a cash-cow.

Now we have the chance to bring back another genre: the top down, turn-based Role Playing Game. Gone from circulation, these gems are probably alien creatures to today's games. I am talking about Wasteland 2. Wasteland was a great game in the classic style of the Ultima series and lead to the inspiration for the Fallout series, which ended up regaining life as a 1st Person, Action RPG. However, all of this came from the roots of party, turn based RPGs.

The folks behind the original Wasteland have taken the lead from Double Fine and are funding on Kickstarter, which seems to be my latest Game Distribution Channel. Being the highest pledge amount on Kickstarter to be reached (over $900,000 in 2 days), this is really the rattling of the swords for those of us not satisfying with the over-sensationalized, shallow games that flood the market today.

For those of you interested, there is still 31 days to go to help an awesome game once again see the light of day!

http://www.kickstarter.com/projects/inxile/wasteland-2

Now if only publishers will learn that people play and want more than just 1st Person Shooters and MMOs!

Thursday, February 9, 2012

More Than Double Fine (Updated)

Today I feel giddy. As video gamer gaming for almost the full history of video games, I have played a LOT of them. I view games as an art form that may do not attribute to things "functional" or "interactive". Although I can enjoy the thrills of the world's Halos and other popular fodder, I prefer games with more depth and artistic merits. Fun is not the amount of headshots you gather, but the emotion you take away when the playing stops. Many of my personal favorites do not show up in the top 10 lists and are normally punished by publishers who don't see enormous blockbuster profits.

Tim Schafer is at the top of my list of gods within the gaming world. His games are always strange and alluring experiences that challenge the traditions of typical games. Not always do these types of games gather mainstream audiences as Tim has experienced with both Pyschonauts and Brutal Legend. This week was already going well for me with news that Pyschonauts 2 may actually happen with the help of Minecraft creator Markus "Notch" Persson, but then I discovered a link to kickstarter:

http://www.kickstarter.com/projects/66710809/double-fine-adventure

For someone that is never the target audience for the most popular Movies, TV Shows, Games, Music, (insert random entertainment form here), this is great news. A game being developed by a legend with his team working directly with gamers, and without a publisher, to make a game. This is how it should be done: without corporate greed or influence. It may not be the game for everyone and may not make millions of dollars, but this is where the future of game development needs to head. And this will be my first kickstarter investment and I hope other people help out too.

Rock the crap out of it Tim! Keep making games for the rest of us!

(UPDATE) 1.3 Million raised already. Congrats Double Fine!

Tuesday, January 17, 2012

Umbrae's Tower Goes Dark for SOPA Protest on Jan 18th

This blog will go dark on January 18th in protest of SOPA and PIPA like may other sites:

http://abcnews.go.com/Technology/wikipedia-blackout-websites-wikipedia-reddit-dark-wednesday-protest/story?id=15373251#.TxWXQ29SRwg

Be prepared to see this page alot!

http://www.sopastrike.com/strike/

Keep Freedom of Speech Alive!

Tuesday, December 13, 2011

The Great American Censorship Firewall

SOPA is set to pass on Thursday (12/15/2011) which will change the face of the internet as we know it. Most people do not understand the incredible complexities of copyright law, and the simple fact is that nearly all of us are in breach of these laws every day. Simply uploading a video to YouTube with a movie poster on the wall or music playing in the background is infringing if you do not have permission. Once SOPA is passed and the safe habor for internet and service providers is eliminated, you will find these player filtering and censoring most stuff you try to post: if they even still allow it.

This might sound apocalyptic, but there are many cases today of companies over reaching or removing content without even verifying it is in fact infringing. Now add to that SOPA which would block IPs, poison DNS records, require removal from search results and basically remove any content for any reason without ANY OVERSIGHT OR VERIFICATION. Someone simply has to accuse you of something and your business, your likelihood, your opinion will be wiped clean. This will ruin small businesses and mean only large companies with the ability to sue other large companies will survive.

Don't believe me? Do a search for Dajaz1.com and read about it. They were taken down a year ago (without SOPA) and had no recourse to get their business back until the government just decided to release it.
How about MegaUpload who got permissions from several artist to create a song and viral campaign, but got removed several times from YouTube because of Universal Music Group complains via the DMCA. Now maybe UMG has reasons and some artist's have a change of heart (we won't know until the contracts come out in court); however, UMG also brought down videos from News organizations who only REPORTED ABOUT THE DISPUTE!
And finally my favorite (to the point) article about the impact of SOPA:
Regardless of what you thing about copyright law and piracy, allowing the government and large media companies to take down any content and sites without any judicial oversight does not make any sense. This is something out of science fiction stories depicting overreaching government and corporation control. This cannot be left alone. Please contact your elected officials and speak out against SOPA and Internet Censorship. Stop American Censorship (http://americancensorship.org/) has great tools that make this seamless and easy, as does the Electronic Frontier Foundation (https://www.eff.org/).

This is not just an attack on the internet, but our entire American Culture!

Wednesday, November 16, 2011

Friday, October 28, 2011

Issue with Site Collection Admins, AD groups and GetUserEffectivePermissions in Sharepoint 2010

As you may know I have been working on a custom Request Access page for Sharepoint 2010. During the process of this I ran into an interesting issue related to using AD Groups for your Site Collection Administrators and what is returned by GetUserEffectivePermissions and DoesUserHavePermissions. To simulate you can do the following:
  1. Create a New Site or Site Collection.
  2. Create an AD Group that contains "Admin, User1" and "Admin, User2".
  3.  Add this AD Group under Site Actions > Site Permissions and then Site Collection Administrators.
  4. Add "Owner, User1" and "Owner, User2" to your owners group, and "Member, User1" and "Member User2" in your members group.
Now create a small web part of aspx page that loops through and lists people with FullMask. I use FullMask because we are migrating sites from 2007 which mucks the owners group and we cannot rely on end users to actually use the owners group. The code I have used is:

using (SPSite siteCollection = new SPSite(SPContext.Current.Site.ID))
{
     int userCnt = 0;
     SPUserCollection userCollection = siteCollection.RootWeb.SiteUsers;
     foreach (SPUser user in userCollection)
     {
          string userSTR = user.Name;
          string userPERM = siteCollection.RootWeb.GetUserEffectivePermissions(user.LoginName).ToString();
          if (userPERM.Equals("FullMask") && !user.IsSiteAdmin)
          {
               userCnt++;
               ownersOUTPUT.Text += userSTR + "</br>";
          }
     }
}
When you run this you should only see "Owner, User1" and "Owner, User2", which would be what you would expect. Now add "Admin, User1" and "Members, User1" to your owners group and reload. As expected, you should now see "Admin, User1" and "Member, User1" listed as well. Finally, remove "Admin, User1" and "Member, User1" from your owners group and refresh. You should see what I am talking about.

"Member, User1" should disappear like you would expect, but "Admin, User1" is still listed and will not go away. Notice my code excludes users where IsSiteAdmin is true. Try adding "Admin, User1" directly to Site Collection Administrators and reload. Poof, he is gone.

This is because when a user is added directly to Site Collection Administrators IsSiteAdmin returns true; however, when the user has access via an AD Group in the same location IsSiteAdmin returns false. I assume that this works properly before "Admin, User1" is added directly because the users permissions do not exist via the sharepoint table. However, when you add the user to the site a record is create and is not properly cleaned up when removed due to them being referenced as Site Collection Administrator via the AD Group.

I have not been able to test removing a user from the AD Group as that is just not a simple job in my environment. I have contacted our Microsoft Rep for more information on this, and will provide more information once I recieve it.

Wednesday, October 26, 2011

Custom Request Access page in Sharepoint 2010 - The Full Story

To share a quote from the most interesting man in the world... I don't code for Sharepoint often, but when I do, I prefer to know what the hell I am doing.

Update (06/06/2012): Before today the code that was here ran the possibility of generating a NullException error getting the current user. I have updated the code to resolve this based on information from Microsoft. For a descriptive addendum, see the update at the end of this post.

Recently I was tasked with customizing the Request Access page in Sharepoint 2010. Our group is small and our users not so saavy, so we simply wanted to list all the Site Owners on the Request Access page. This way end users would know who they needed to contact if they did not have access to a site. Slam dunk, right? Well, so I thought.

First off, I am by no means an expert Sharepoint or .NET developer. At the time of this writing, I have only developed a handful of Sharepoint applications and have under 6 months of experience. I have been a developer for a long time, but Sharepoint and .NET are not my native tongues. As such, I will explain as much as I understand and did to complete my tasks, but the why's of all of this will only be assumptions. Please feel free to educate me if I speak in error or you feel the need to clarify any of this.

I started out with a Google search, as all quests for knowledge usually do, and found a lot of links on how to do this. One of the most concise posts was by Anmol Rehan:

http://www.anmolrehan-sharepointconsultant.com/2011/08/how-to-use-custom-access-denied-page-in.html

One problem that is not well explained is that this creates a Site (Site Collection) scoped feature which will set the custom page. UpdateMappedPage() is not available to Sandboxed Solutions and must be a Farm solution, and sets the custom page at the WebApplication level. However, due to recent security fixes, you should get an error when trying to deploy or activate your solution.This is because webApp.Update() has to reach up into the WebApplication to work properly. As such, make sure you have this scoped at the WebApplication level and NOT the Site Collection level; Otherwise activating/deploying will give you an Access Denied error in your logs.

Another problem, my main problem and an issue with all the other information I found, is it only tell you how to configure Sharepoint to load a custom page. Anmol lists a simple 3 step process; however, step 2 was a lot more involved - at least for me - since this does not detail exactly on what you have to do to create these pages. I posted this question on Microsoft's forums (my post), but - as seems to be usual - I owned my own thread and had to figure it out myself. As my post started to be the number 1 hit when searching for my problem, I figured I should document this for others that might run into the same issue. This seems fairly common, but maybe I am just so green I am the only one that needed help. Either way, I hope this helps someone.

So look at Anmol's post and get started, when you get to step 2 "Create your costom Access Denied Page in Layouts" this is what you do.
  1. Right-click on your project in the Solution Explorer and pull out the menu for Add then click Sharepoint "Layouts" Mapped Folder.
  2. Right-click on the folder automatically created under the Layouts folder in your project then pull out the Add menu, click New Item and then select Application Page.
  3. Copy the contents original page into your custom one (these are located in the hive under TEMPLATE/LAYOUTS/) and go crazy. Easy right?
Well, not really. What I found is that if I just built my page then I would either get a 403 Forbidden error or got redirected to the Access Denied page. These types of pages are considers Safeguarded Application Pages, and appear to have some restrictions. First off, there can be issues with dynamic master pages and - I assume - other things that keep you from just laying into developing your custom page.

My first issue was I was really used to working with the code-behind; however, this only seemed to work if the Page directive Inherits itself. This also seemed to be the core reason for the 403 and Access Denied redirection. Once I changed this to inhert the original page - in my case Microsoft.SharePoint.ApplicationPages.RequestAccess - I could actually start seeing my changes. Of course, I could not use code-behind as any references to the page went all red and squiggly.

So you need to put all your functionality into the aspx page. Microsoft supported using code behind, but for these pages it seemed troublesome. This is a small bit of information, but this could have saved me a few days of work. I was never able to find any rules to what you could and could not do with these pages, and I would still love to know the hard facts. However, in the end I was able to get things working. We are still working around some issues related to using AD groups as Site Collection Administrators, which tends to list the AD group members as FullMask with the IsSiteAdmin equal to false, but I am hoping this is just an issue with our development environment.

To close up, this is the code I ended up using in my custom ReqAcc.aspx page:


Thanks to everyone for your support and help!

Update: For those that used the old version of the code (prior to 06/06/2012), here is the itemized changes:
  1. Replace SPUser reqUser = SPContext.Current.Web.CurrentUser; with string strUser = String.Format("{0}\\{1}", Environment.UserDomainName, Environment.UserName); and import the System namespace (<%@ Import Namespace="System" %>) You then need to convert this to a user object once you get into your RunWithElevatedPrivileges block with SPUser reqUser = thisroot.RootWeb.SiteUsers[strUser];. This is because the CurrentUser context was removed in these Safeguard Application pages as there was a bug allowing users to elevate privileges.
  2. I also now scope this as a WebApplication solution as restrictions were also put in place to disallow a Site Collection from updating the WebApplication. This makes sense, but limits us actually controlling this at a Site Collection.
  3. Added additional code I wrote for emailing site owners for access.