Showing posts with label technology. Show all posts
Showing posts with label technology. Show all posts

Friday, December 04, 2009

SharePoint? No, SwearPoint!

I’ve been working on a SharePoint project for work for the past few months, and I’m getting close to the “go-live” date.  Actually, it’ll go live whenever I’m “done” (whenever that will be…).

But that’s beside the point.

The point is that I’m becoming less and less impressed with SharePoint as a development platform.  And I didn’t start out with a great love for it in the first place.

Perhaps it’s because I’m constrained to only using SharePoint Designer.  No .NET code allowed on the site I’m working on.  That bums me out right there, since I consider myself a great .NET developer.

Most of my work has revolved around customizing SharePoint lists, and using SharePoint Designer to create custom workflows to support the operations of the team I’m developing this for.  Not necessarily hard, but the requirements have been challenging to implement, to put it nicely.

One main requirement, as it turns out, isn’t really possible to implement fully in SharePoint, at least in a nice way.  There are two groups of people who are responsible for different items (a.k.a. “fields” or “columns”) in a list.  One group, let’s call them “Group A”,  doesn’t want the other group (“Group B”) to be able to modify Group A’s fields.

Now let me stop right there!  I understand that SharePoint is a “collaboration” tool, so preventing users from collaborating just doesn’t jibe with the core of SharePoint.  That’s pretty much the crux of the problem.

If it were possible to set permissions on the field level, this blog entry would not be needed.  But it is not possible to restrict access to only certain fields in a list to a certain group of people, so I had to think of ways to enable this functionality, and the way I came up with is sub-par at best.

I ended up creating 3 lists: one for Group A, one for Group B, and one which shadows Group B’s list.  Then there are workflows which copy Group A’s fields in Group A’s list to Group B’s list, and Group B’s fields in Group B’s list to Group A’s list.  The “shadow copy” list is there to prevent the workflows from running in an infinite loop—the items are only copied back to Group A’s list if they are different between Group B’s list and the shadow copy list.

As it turns out, this is not without problems, since if someone in Group A modifies one of Group B’s fields in Group A’s list (did you follow that?) then it will remain out of sync with Group B’s list, since Group B’s fields aren’t copied from Group A’s list to Group B’s list.

As it turned out, thankfully, this wasn’t as big of an issue for this particular solution (whew!).

It was my intent to set permissions on the lists such that people in Group A only had read access to Group B’s list, and vice versa.  However, as it turns out, the workflows will fail to copy data since they run as the user who initiates the change to the list.  So when a Group A person changes an item in Group A’s list, the workflow tries to copy that change to Group B’s list but can’t because Group A only has read-only access to Group B’s list.

So I thought I could change the permission to allow Group A to edit Group B’s list, but then just set the “Hide from browsers” property on Group B’s list so that Group A couldn’t find it when browsing the site.  So instead of preventing a modification of Group B’s list through the use of SharePoint Permissions, I would be preventing the modification of Group B’s list by making it very hard to find the list.  Problem solved!

Not.

Once again SwearPoint, er, SharePoint worked against me, and here’s how:

If you set the “Hide from browsers” property on the list, it does, in fact, hide the list from site when you click on the “Lists” or “All Site Content” links in SharePoint.  HOWEVER, it also hides the list from workflows!

[UPDATE: The list’s name is the only thing hidden from the workflow.  The error I was seeing which led me to the previous conclusion was due to a user-error (and, no, I wasn’t the user!).  The workflow continues to operate successfully if the referenced list is hidden.]

So my final solution still has three lists, one for each group and a third to ensure that the workflows eventually stop, and each group can see the other group’s lists.  Not at all what I set out to accomplish!

It’ll just have to be a training issue to keep each group out of the other’s list.

So much for collaboration (at least in this project).

Thursday, August 27, 2009

Not off to a Good Start

Since I don't have a personal license for Visual Studio, I decided to download and install Visual Studio .NET 2008 Express.  Microsoft makes it very easy to install everything you need by downloading the Microsoft Web Platform.  That was the route I took to install Visual Web Developer.

It downloaded a small "loader" application which I used to choose which options to install.  There were many more options than I really needed, so I just chose the ones I knew I needed, and a couple others that I thought sounded cool.

That overall experience was nice, but required two reboots to complete.  One reboot for .NET 3.5 and another for the Microsoft Installer.

Then I started up Visual Web Developer, chose to create a new project, chose "Silverlight Application", gave it a name and folder to put it in.

Then it terminated unexpectedly.  No warning whatsoever.

When I started it back up, my project was listed in the "Recent Projects" list, so I clicked on it.  The Silverlight application was listed, but the web site to host it was not, so I assume that the crash happened when the web site was being created.  Not sure.

Stay tuned as I dig into this problem and try to get this first Silverlight application up and running!

Wednesday, August 26, 2009

Silverlight Resume Project

I attended a Silverlight Firestarter event last Saturday at the local Microsoft office, and let me tell you: I'm pumped up about the possibilities.

Monday I went to work only to find out that they didn't need my services any more.

So today I'm going to try my hand at creating my resume, online, using Silverlight.  I'll post the progress as I go.

Wish me luck!

Something I Never Thought I Would See

This morning I noticed that there was a Java update available for my computer.  It had been a while since I updated, so I decided to go ahead and update.

Imagine my surprise when I saw this part of the installation:

image

Isn't that a little like dogs and cats living together?  Sun was recommending that I install a Microsoft product.

I think this may be a signal that we're in the "end times", never mind what the Washington politicians are doing!

Tuesday, June 03, 2008

Animation-ish

One more quick post for the day...

I just heard about this software and wanted to share. I think it would be something cool for my kids to play around with, though it may be a little over their heads at the moment. Well, over the 3 y.o. and 1 y.o. heads, but maybe not the 6 y.o. and probably not the 9 y.o.

It's called "Animation-ish".image It just looks cool. Try it out.

I downloaded the trial and tried one quick "wiggle-ish", but I was on a laptop that didn't have a mouse hooked up to it and had to use the touch pad, which is on its way South... So my result was less-than-desirable, but still kind of fun. Here it is (I hope this works, but if it doesn't then right-click here and save the AVI file to your local disk--be sure to have "repeat" turned on, because the video is only 3 frames long!):

Digital Music Library

0516081003 I have almost completed my first phase of going totally digital in my home.  I spent a few days last week ripping all of my CDs to MP3 format.  Well, like I said, I ripped almost all of my CDs.  I haven't gone through the Christmas CDs or my classical collection.

I used Windows Media Player to rip them at 320K, which is the highest setting it supports.

Why not use iTunes, you ask?  Well, I do have iTunes installed on the same computer, but I'm only using it to get music on and off of my iPod.  I like how WMP organizes the files, especially when it comes to album art.  With iTunes I see a file that claims to have the album art, but I don't know what format it's in.  With WMP there are actual JPEG files that get set as the folder image when browsing in Windows Explorer in "Thumbnails" view (like you see in the background of the picture above).

Plus, my ultimate goal is to get a Windows Media Center PC and extenders so that I'll have access to my media everywhere in the house, so I want to keep this as an all-Microsoft solution.  For the moment, though, I'll wait: the current CableCARD technology doesn't support "On Demand", yet.  Someday it will and my home media system will come to fruition.

In the meantime, my entire cabinet of CDs has been compressed down to one 500GB external USB hard drive.  It's a funny thing: now that I have my entire collection readily accessible I can't find anything to listen to!

Tuesday, May 13, 2008

Phun is, well, Fun!

I first heard about Phun a couple of weeks ago, but finally downloaded and installed it a couple of days ago.  Be warned, it is addictive!

I have barely started learning what all it is capable of modeling, but already have created a scene (not the one pictured--that one actually comes as part of the download) with an incline, rolling ball, a platform with a spring, and a few other things.

It's phun to watch thing "come alive" once you click the play button.  Sometimes you get unintended effects, like once when I didn't balance a large ramp that I drew freehand.  It ended up falling over, when in fact I was expecting the ball I placed on top to roll down its side.  (That was easily fixed by "fixing" it in place with one of the controls from the toolbox.)

From reading the web site (link is above) it appears that there is a lot of work planned for this free download.

Take my word for it, download it and start having phun!

Friday, February 29, 2008

Water-Free Potties

This is pretty cool.  The office building I'm in has installed urinals in the men's bathrooms which do not use water.  It has taken some getting used to...

The urinals are made by Sloan, using Falcon Waterfree technology, and the ones installed in this building look like this:

DSC00004

Notice anything different?  For one, there are no water pipes!  If any women readers of this blog picked that out, then I'll question how you knew!  :-)

DSC00007 If you'll look closely, you'll notice a small spec above the ring at the bottom.  A close-up view is to the right.  Yes, it is a bee.

My first day here, I was instructed that I was supposed to "aim for the bee", to which I replied (though only to myself), "Poor bee!"

Like I said, it has taken some getting used to.  I'm fairly accustomed to the sound or rushing water when I step away from a urinal, assuming, of course, that it is equipped with an automatic flusher.  The silence after stepping away from one of these is, well, a little foreign to me.

I have no clue what the return on an investment like this would be.  Granted, a lot less water is used each day in this building, which is cool, so there is the main cost savings.  I don't know what the maintenance cost is like on one of these, but I'll assume that it is less than the cost of flushing water down the drain...

Monday, February 25, 2008

Moving Day!

No, we're not changing addresses.  However, I have officially moved into my new office in the basement as of Saturday!  There are still a few things that need tidying up--the main things being covers for all of the outlets and light switches.  But the office is in a state now where it can be used.

My thanks go out to my good friend Darren for his help (and his hand-truck) on Saturday moving the monster that is my desk.  THANKS DARREN!  My arms are still a little sore today (Monday--two days later!).

I also (finally) rearranged the new cable/phone modem and wireless router down in the utility room so that they are off the floor.  Eventually I'd like to get a nice enclosure to contain all the wiring endpoints--a patch panel of sorts--so that I can more easily configure which network outlets are active.  As for now, I still have a mess of cables in the utility room.  And I use the term "mess" in its technical definition.  :-)

Anyway, as a result of switching over to using the cable modem provided by Comcast (which came into our house after they decided to end their old phone service and we went with their Digital Voice phone service), I now have a spare cable modem.  Anyone out there want to buy a relatively new (~18 months old) Linksys cable modem?  I can provide a model number if you need it.  Make me an offer!

Wednesday, September 26, 2007

Blogger Play

This was posted on Blogger's "dashboard" page: Blogger Play. It's a more-or-less real-time slideshow of images that people from all over the world are uploading to Blogger currently. Disclaimer: I won't be held responsible for the lack of work that you get done because you're watching random images instead of doing what you're supposed to be doing!

Tuesday, December 12, 2006

I Switched

Today I finally started using my new Dell D820 laptop. I've had it since September but I have not had the time to install everything I need to do work on it. It's still not 100% there, yet (I'm missing Visual Studio, for example), but I've got what I need for the project I'm on at the minute. Basically that means I have the latest Office (2007 version) and not much else...

I also loaded Internet Explorer 7, and I'm getting used to it. So far it just seems like the Microsoft version of Firefox.

I'm planning on keeping my 3-year-old Dell D800 around for a while to use as my personal machine, database server, and second monitor (using MaxiVista).

Thursday, August 10, 2006

.NET 2.0 Website Conversion: AutoEventWireup Fix

[I'm going to take a short break from my family blogging and preserve for posterity my findings after converting a web project from .NET 1.1 to .NET 2.0. Pictures of adorable kids will return soon...] At work we recently converted a website from .NET 1.1 to .NET 2.0. This was accomplished by running the conversion wizard which is built in to Visual Studio 2005. After the conversion, however, we noticed that some of our pages were behaving strangely--we would have lists with duplicate items in them. This wasn't the case before the conversion, and it was my task to fix it. What I found out is that in .NET 2.0, the AutoEventWireup page directive is set to true by default. In .NET 1.1 it is set to false. According to the Common ASP.NET 2.0 Conversion Issues and Solutions document, this is a known issue due to events firing twice (Issue 23: Event handlers called multiple times). In this document it explains that the conversion wizard is smart enough to remove the duplicate event wireups, but only if they live in the InitializeComponent() method of your page's codebehind file. In our scenario, we had some event wireups in the OnInit() method (not my fault--it was inherited code!). What I didn't know what how to detect where those duplicate wireups were so I could get rid of them. So I did some more digging. As it turns out, in the online help for Visual Studio.NET 2005 there is a section which explains the AutoEventWireup page directive. (This link will only work if you have VS.NET 2005 help installed on your computer.) It explains that when the AutoEventWireup directive is set to true, ASP.NET performs a lookup using reflection to find the events in your page's codebehind class. The naming convention for the events is "Page_" + event name. So for the "Load" event, ASP.NET looks for the "Page_Load" method in your code, and calls it if it finds it. So this means that only the Page events are automatically wired up, and no others are. That makes sense, since this is a Page directive... Historically, reflection has been considered slow, or at least there's a lot of overhead when loading the assembly and picking out the parts inside of it. However, according to a comment left by Scott Guthrie on this blog:

Event wire-up is done via reflection, but the type-descriptors are cached (so the lookup is one time only).

From a performance measurement perspective, there is no difference between autoeventwireup=true/false. That is one reason we switched to it as the default with VS 2005 Web App Projects.

So now we've got AutoEventWireup set to true by default, and the wizard removed the "Page_*" methods from our InitializeComponent() methods. But we still have events firing twice. The last part of the puzzle is how to remove the remaining page events which are manually wired up. Regular expression searching to the rescue! You can use Visual Studio's "Find in Files" feature (say that 10 time really fast!). Click on Use Regular Expressions in the Find Option section and then paste this in the "Find what" text box:
\+=:b*new:b*System\.EventHandler:b*\(.*\.Page_
This will search for adding a new System.EventHandler for a Page directive, and should take care of most variations in using white space. It will also handle the "this" keyword is in front of the delegate name. I hope this helps someone else out there understand how AutoEventWireups work, and how to fix your web site if you run into the same situation as I did. Please leave a comment if it helped. Thanks! [Update: You'll also want to check to see if the AutoEventWireup @Page attribute is explicitly set to false before you remove the wireup from the InitializeComponent() method, or else the page event won't fire!]

Friday, July 07, 2006

MaxiVista Update

I tried the demo of MaxiVista and liked it, and then it expired. I uninstalled it. I forgot about it.

Recently, however, I have wanted to control the information coming at me a little better, and I remembered MaxiVista. So I bought the Pro version. (This version does everything except mirror your desktop on another computer--I don't foresee the need to do that.) Now I have my e-mail client open on the secondary PC and my main work open on the main screen. I can move windows around from screen to screen if I want to change where they are located.

One thing that this version does that the demo version did not do is control the second PC from the first one. So instead of making your desktop span multiple screens, this allows you to use your primary PC's keyboard and mouse on your primary PC and then drag the mouse to the other monitor and start accessing that PC's files and programs--all while still using your primary PC's keyboard and mouse. Pretty neat, though I'll still probably not use that feature all that much. A side effect of this feature is that you can highlight text on one PC, copy it, and then paste it onto the other PC.

MaxiVista also allows up to 4 PCs to be used--the primary plus 3 others. Right now I only have two laptops in use (which I think is enough for now at least).

Configuration: By default, it is configured for "Maximum Speed". This had a noticeable effect on what the desktop looked like on the second PC, so I changed the setting to "High Picture Quality" and that seemed to take care of it (the maximum setting is "Maximum Picture Quality", but "High Picture Quality" seems to give me the best look/speed tradeoff).

I just wanted to follow up on this since I said that I would.

[Update: After browsing through the documents at the MaxiVista web site, I came across this note in the Version History page:

For experts only: To change the MaxiVista behaviour when locking the Viewer PC, you can alter value "2" to "1" in following registry key: [HKEY_CURRENT_USER\Software\MaxiVista\A2\username]"lock_method"=dword:00000002 (video tutorial)

I much prefer the setting set to "1" than "2". In this mode, the monitor program on the second laptop doesn't close when the primary laptop is locked, so I don't have to reposition all the programs back onto the secondary laptop/display once more after logging back into Windows. Note that "username" in the registry key name should be the name you logged in with, not the literal "username".]

Thursday, August 18, 2005

Cool Technology

This looks cool: http://www.maxivista.com/

I have a couple of computers lying around, so I'll post back here if I give it a try. Not sure if it will work on my Commodore 64, though!

:-)