Sunday, March 04, 2012

Windows 8, VirtualBox & Hyper-V

How could I resist...don't tell Corporate IT, but I just spent the weekend installing Windows 8 on my HP 8540w workstation. The install went fine, ended up doing a clean install as the upgrade didn't complete for whatever domain policy reason. I'm mainly interested in Windows 8 because - FINALLY!!!! - Microsoft has a virtualization story for 64 bits. I started out using VirtualPC when I was doing SharePoint 2003 development - to be able to have a server running on my laptop with my own domain, being able to have multiple servers running to simulate my SharePoint production environments, priceless. Then along came SharePoint 2010 and so much for VirtualPC...like many others I had found out about VirtualBox & have become a fan - it's a great piece of software, has been running like a charm for me & my team, but darn it, my production servers are running Hyper-V and it would be nice to try it, but was I willing to install Server 2008 as my host OS? nah.... So here we are with Hyper-V now on Windows 8. I'm kind of hip deep in some development projects so I can't just switch over entirely to it yet, so I thought to install VirtualBox first, to be able to keep on working, then migrate over to Hyper-V. Problem #1...I couldn't enable video acceleration in VirtualBox. Yeah, not a big deal, but I went in to Control Panel & saw it was using the default Microsoft video driver as my graphics card driver. That wasn't going to work...so I installed the latest NVidia graphics driver from the HP 8540w Windows 7 drivers site and I'm good to go. Display looks MUCH nicer too, thank you very much. Problem #2...so I couldn't get to the VirtualBox properties System Acceleration tab - it was grayed out. Tried booting up the VPC & it kept rebooting. The machine settings were correct - IO APIC enabled, enough RAM, 2D video acceleration...but still wouldn't start up Windows. I know my laptop supports processor enhancements, but then thought to remove Hyper-V (Start / Run / appwiz.cpl) and removed Hyper-V....then the acceleration tab is enabled, and the VPC started up just fine. So for now, looks like only one virtualization technology at a time. Soon as my development project dust is done - or next weekend, whichever comes first - I'll get a new Hyper-V dev environment spun up, then it'll be all Hyper-V going forward. Hmm, let's see if I can take my VirtualBox VHD & import them into Hyper-V - be back in a bit!

Thursday, January 26, 2012

SharePoint 2010 - Access is Denied, and I'm Site Collection Owner!

Had an interesting one yesterday. I finally got around to clearing up those annoying warning messages about the Cache Super Reader account in my Windows Event Viewer logs on one of my servers. I used the stsadm command to set the property for both the Cache SuperReader and SuperUser accounts, good to go - or so I thought!

Came in the next morning to find the server still up, but no one able to access any site collections on the web application where I set those accounts! SharePoint came back with Access is Denied, even though it was all fine yesterday, and the users were set up as Site Collection Owner through Central Admin. The logs didn't show a whole lot, other than an issue with Kerberos and the Services account I'm using - odd.

Knowing the last thing I changed was that cache account, I double checked the values, ran the PowerShell script referenced in the very good article SharePointServerCachesPerformance.docx - highly recommended read! The issue for me turns out that those accounts weren't added correctly in the User Policy for the web application. I repeated this on a dev box this morning, and verified indeeed you have to make sure your User Policy settings are correct:
  1. Open SharePoint Central Admin
  2. Click on Application Management
  3. Click Manage web applications under Web Applications
  4. Select (single click) the web app having issues (or better yet do them all while you're here!)
  5. Click on the User Policy icon in the ribbon
  6. Click Add Users
  7. Click Next to select the zone, go with the default All Zones
  8. Enter in the account of your SuperReader user, and grant this account Full Read permissions, then click Finish.
  9. Repeat this for the SuperUser user, but grant this user Full Control.
  10. iisreset - and let those users log in!

Happy 2012!!

Wednesday, December 28, 2011

Road trip

Here we are at the end of December & I realize I have been a neglectful blogger in 2011! I promise I'll get a post on SharePoint Web Templates before the end of the year, but I still have vacation on the mind for now...just back from two weeks in China with the family. The most indespensible tool of the trip: the iPhone 4g!!

iPhone in China


For those of you planning a trip to China, the news is yes, your iPhone will work just fine. I signed up for a 125MB data plan with AT&T before we left, then once the plane landed & we were through immigration, I powered up the phone, and it connected straight away to China Unicom. Note, in two weeks I used 180MB of data, even with many of the hotels having wireless access - so sign up for more than you think you'll need. 125MB cost me $49.95, we'll see what the extra 55MB is going to set me back! Apparently it would be prorated for the amount not used, so think big.

There were a few iPhone apps I found particularly helpful - the Explore Metro subway navigation maps were fantastic - I downloaded the Shanghai & Beijing versions, very helpful for route planning, finding the closest metro station, and knowing the fares, especially in Shanghai where fares vary by distance. These apps are $2.99 each but are well worth it.

TripAdvisor's app was also helpful for showing restaurants & attractions based on my current location, and being able to search by type. I used the hotel's wireless connection with the laptop to write reviews on the TripAdvisor web site.

The navigation & GPS capability of the iPhone itself was the most helpful of all. I was able to plug in an address in English (pinyin) & it would find the location just fine, then I'd be able to use the live navigation to make sure we told the taxi driver the right place! On one trip the taxi driver used it to help us find the hotel - the street names were shown in Chinese characters as well as pinyin. Maps worked just fine, had a lot of the points of interest already on the map, so easy to find them.

On the map, tap the location indicator twice and the phone display orientates itself to a relative, compass based setting. So now you know which way to head to get to the nearest Starbucks, is that useful or what!!!

Subway & Train Travel


If you're planning on traveling between cities, the train system was really convenient, reasonably priced, comfortable & on time. There's an app to help understand train schedules, really good. Armed with the "G" train number and time of departure, we were able to purchase tickets knowing the time & price before getting to the counter.

How the subway systems in Beijing & Shanghai work:

  • The Beijing subway system has single trip tickets available. Buy then at your departing station for 2 RMB per person. The fine print: you can only use the ticket to depart from the station where you purchased the ticket...so don't be clever like we tried to be by buying the return ticket at the same time, figuring you'd save hassle later. No go.
  • Shanghai's train system is a bit more complicated because fares vary by distance. Here you can purchase a 20RMB stored fare ticket, then just make sure you have enough stored up. The station booth can deposit funds onto the ticket, no problem, and the entrance gates show how much fare remains. When you're ready to leave, you can cash in the ticket, again at the station where you purchased them. We were able to cash in the ticket at the Shanghai Railway Station at a convenience store, it was a bit complicated though!
  • Use the ticket with the entry gate (slide it in for the day tickets or touch with the stored fare tickets), then use the same ticket to exit. The day tickets will be stored in the reader.
  • Get to the station platform & decide which train to use - use your handy iPhone app to determine the previous & next stations, then look to see the directions for the trains indicated & hop on. There's a TV that shows when the next train will be arriving.
  • Station announcements are made in Mandarin & English & are very clear.
  • The trains in Shanghai & a few in Beijing have LED indicators showing where the train is between stations & which station is next.
  • Dig the animation displays in the tunnels in Beijing!
  • If a seat opens up - don't think, go for it!! This is a serious you snooze, you lose situation!


Other Impressions


It's been 9 years since we were in China last, and the pace of change in that time was remarkable. In Shanghai, we saw a Bentley dealership, apparently they are completely sold out through next year's production. Saw a lot of Maseratis, Porche Panamera's, 7 Series, you name it. Now the country side from the train still looked about the same, but I kept an eye on the phone the whole 5 hour trip from Beijing to Shanghai & had a solid 5 bars of signal the whole way.

Food prices were higher than we remembered. Going to dinner at a not-so-fancy place, in a somewhat touristy area, dishes ran from $3.50 for my favorite Yang Zhou Fried Rice, $10 for a delish dish of beef and Chinese broccoli, up to $25 for a "gui yu" sweet and sour fish. Mind you it was mighty tasty, but those prices are about what we'd pay here in the States...but our incomes are much higher in proportion. In a not so touristy area, I paid $15 for three bowls of noodles and a plate of veg, so I guess it does depend on where one goes.

Be prepared to reign in your personal space needs! There's a lot of people there, and the American bubble of space is much much larger than that of a typical Chinese! Expect to rub elbows & be gently nudged out of the way without an excuse me. Just the way it is, and it does work.

We bought some baby Mandarin oranges in Beijing & Shanghai, dang they were good! Great strawberries also.

Bargaining...it's all part of the program. Except in department stores, prices are negotiable. If you overhear someone buying the scarf of your dreams for 100RMB, when it's your turn the shop keeper will swear over their entire ancestores they never sold such a scarf for a measly 100RMB. Just be prepared to walk away...they'll come after you, but if the price still isn't what you want, really, walk away. The next vendor will have the exact same scarf at the price you want.

Hotels...the thing now seems to be glassed in bathrooms! Since how to put this delicately, when I'm enthroned I do like my privacy, there are shades to block the view. Goofy! Five star hotels are very nice indeed, but try some of the four star Chinese brands for a slight change of pace. If you can see if you can get breakfast included - at one five star, breakfast was RMB138 per person, so if that's included it'll save you some cash. If not included, go find a "Yong He Da Wang", get a bowl of fresh soy milk & some of those "yo tiao" doughnuts, and you'll have enough calories to keep you til the noon dumpling or noodle soup feed.

Money exchange...ATMs are now everywhere. The five star hotels we stayed in had money conversion machines - feed in your USD bills and get RMB back. This was convenient but expensive...the better bet is to take your greenbacks to a Bank of China office. Took us about 40 minutes at the BoC branch off People's Square in Shanghai, took about 15 minutes at the branch south of Tiananmen on Qianan Street. Same exchange rate for cash or traveler's checks now too, it seems.

Lastly, English...yes, there is plenty of English spoken, and be prepared to see people listening in to your chats on the subway & at restaurants, no worries it's just curiosity! At the same time, be armed with some basic Mandarin (or get the LearnChinese app & let it talk for you) to make things easier. For instance, "yi ge zhe ge" is your friend for pointing to a picture on a menu & asking for that item.

Needless to say yes we did enjoy our trip quite a bit. Our daughter really enjoyed it, she's a big fan of nui rou tang mian, had that for six straight meals & could keep going. Oh, one last thing...kudos to Delta Airlines for the seatback TV entertainment system - 13 hours of TV kept the daughter's attention with no fussing at all. Even some younger kids were parked still staring at Handy Manny for 13 hours. Even some, ah, older kids totally dug watching 2001: A Space Odyssey, Midnight in Paris, Harry Potter IV - 7 (could have seem them all & the LOTR trilogy), Tron:Legacy, and more!!

OK enough for now - next post will be about SharePoint web templates, promise!

Zai jian!

Friday, April 08, 2011

Referencing resources in SharePoint libraries

Wow, my first blog posting for 2011 - yes I have been busy, and neglectful!

One thing that's kept me busy is working with jQuery & SharePoint - very good stuff. But I have my jQuery js's and style sheets in a SharePoint document library. When I tried referencing them, I kept getting errors on the page...

because, I wasn't referencing these as:

<script src="./Jquery/jquery.tools.min.js" type="text/javascript">

Note the "." before the library name - that's what was missing.

Back to it! See ya!

Monday, October 25, 2010

DoDN Source & Presentation

Thanks for coming to Western Michigan's Day of Dot Net this past Saturday! The session went well, had some good questions about the configuration of a SharePoint developer's rig that I'll address in some detail in a subsequent post, but wanted to get this posted first. It's the presentation deck and the source code for the demos. The source code is all built for Visual Studio 2010. If you have access to the Expression Blend tools, all the better, but for the demos Visual Studio will definitely do the trick.


Here's the link to the zip file: DoDN-SharePoint-Silverlight.zip


Note that for the third demo, you'll need to host the compiled .XAP file in a SharePoint site that has a list named DayofDotNet. There's a .STP file (a SharePoint List Template file) you'll need to use to create this list, so that it has the fields & content the code is looking for. Post a comment or email me if you get stuck.


Thanks again for attending!


Steve & Charles

Thursday, October 07, 2010

Visual Studio 2010 & Crystal Reports - change server at runtime

What? This isn't a SharePoint topic! You're right...every so often have to stretch a little bit.

So I have an ASP.Net web app and needed to add in a report. I didn't want to hand code it, and I had looked at using Crystal Reports for a different project & liked how nicely it integrates with Visual Studio. EZ-PZ to deploy it to the server, just install the runtime, deploy the project and we have reports!

Then came time to get the project up to production. I installed the runtime for Crystal Reports, clicked the Report link,and got the dreaded Database Login failed. Hmmm - I had updated the web.config appsettings to point to the Production SQL Server instead of my dev box.

That wasn't enough. Found a few entries suggesting to use the CrystalDecisions ConnectionInfo class, then another page saying to apply this change to all of the tables & subtables on the report, but that didn't help me - still got that logon error.

I ended up going the route of populating a data table with my report data, then using this table in the report - made things easier.

One other twist, I then needed to export this as a PDF, but I have SSL enabled; had to add in a few more lines of code. Take a look! And yes, this is VB.Net - it's an inherited project, too many lines to convert over!

Dim dt As DataTable

dt = BindReport()

rpt.SetDataSource(dt)

Dim reportDate As DateTime = Session("CurrentPayPeriod")

' Tell the browser this is a PDF document so it will use an appropriate viewer.
Response.Buffer = True
Response.ClearContent()
Response.ClearHeaders()
Response.ContentType = "application/pdf"


rpt.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, False, "Timesheet Report")

Dim conString As String = System.Configuration.ConfigurationSettings.AppSettings("connectString")
Dim con As SqlConnection = New SqlConnection(conString)
con.Open()
Dim cmd As New SqlCommand("usp_GetReportData", con)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@SelectedDate", SqlDbType.Date).Value = CDate(Session("ReportPeriod"))
cmd.Prepare()

Dim sqlAdapter As SqlDataAdapter = New SqlDataAdapter(cmd)

Dim dtReport As DataTable = New DataTable()
sqlAdapter.Fill(dtReport)
con.Close()

Return dtReport
End Function

Wednesday, September 01, 2010

Summer 2010

Hard to believe it's the last official week of summer - school starts next Tuesday, back to the old schedule! And hard to believe my daughter's already a third grader, time goes by!

So what have I been up to lately? SharePoint 2010 architecture. Haven't done a ton of coding lately, but I have inherited an ASP.Net application and have another one in the works. Did some coding with Silverlight & the Client Object Model for 2010 - blog post coming - it is sweet.

COM (the new COM, that is) is an EXCELLENT way to continue to deploy code to SharePoint, but do so without having to bug your administrators or your Change Management team. The code runs on the client, so no consumption of server resources, and the code can do only what the user can do, so the risk of deleting all sites on the farm is minimized.

Have also been looking at multitenancy. This is going to be big with 2010 - being able to partition off multiple companies on the same set of hardware, w/o needing completely separate farms.

Look for more blog entries about all of the above...really...I promise...