Avonelle's Tech Blog

Lenovo Thinkpad Tablet 2: Where have you been all my life?

For quite some time I have been on a quest to find a good tablet device. For me, “good” includes the following features:

  • Long battery life so I can get through a day of taking notes successfully
  • Full use of OneNote for typing notes, inking notes, and recording audio at meetings
  • Touch friendly email client
  • Touch friendly twitter client
  • Touch friendly news reader

Devices I’ve tried for this include:

HP Slate 2

Dell Latitude ST Tablet

Surface RT

Each of these devices failed to live up to what I truly need. The Slate 2 did not successfully run Windows 8 very well, and so was not a very touch friendly device. The Latitude ST was okay, but its CPU is laggy and the inking experience was pretty poor. The Surface RT is actually not too bad, but doesn’t support inking in OneNote and (surprisingly) doesn’t support recording audio directly in OneNote, either.

For a while I had heard good things about the Lenovo Thinkpad Tablet 2. I finally got around to trying one out at the Microsoft store, and I was impressed. The inking experience seemed pretty good. I got one in July, and my first opportunity to use it in an all day inking scenario was last week.

The device performed flawlessly. I was able to  take notes all day long without battery issues.  I was also able to access my email, my newsreader, and my twitter client easily. The device is lightweight, and comes with a cover that protects the screen yet easily opens up for use. I was able to carry the tablet in my purse but access it when I needed it.

I haven’t yet tried recording audio in a real-world scenario (typically I would do that at a client meeting not a conference), but I’m relatively confident that will work well, too.

There are a few minor problems I’ve experienced with it:

  • It isn’t clear when the device is turned off if it is correctly plugged in for charging. if it is on you can easily tell by looking at the battery indicator on screen.
  • For some reason, my battery only wants to charge to 56% initially. If I unplug in the charger, wait a minute or so and plug it in again, it finishes charging. Other owners appear to have this problem too. I hope a firmware update solves this.
  • The cover that comes with it turns into a stand for the device, but it puts it at a fairly poor viewing angle for me. I need it more reclined. I’m fairly short, so this probably is an issue for most people using it.

Overall, I’m very happy with my Thinkpad Tablet 2 purchase. It is not a cheap tablet (around $600), but since cheaper devices didn’t meet my needs I’m not complaining. All the other tablets are piled in a corner now – the Thinkpad Tablet 2 is my tablet of choice.

Posted by Avonelle on Sunday, August 18, 2013. There are 0 Comments.

Biggify all the things

I’m shocked.

I recently sat through a number of presentations giving by professional, experienced people at a for-pay conference. In almost all the cases, the speakers did not make sure their content was easily viewable in the back of the room. In fact, in many cases it wasn’t even easily readable in the middle of the room.

Why would you invest time and effort in creating slides, code demos, etc., and then make it difficult for your audience to see?

Test your slides AND code AND demo apps (or browser windows) on the projector to be used when you get to the venue. Not just your title slide – ALL your slides. And don’t just look at it from the podium. Open each thing up and walk to the back of the room and check it.

I tried the “PresentOn” command with the VS2012 Productivity Power Tools, but that wasn’t NEARLY enough when I actually tested it in the room. I ended up bumping my font size to 20pt, and I wasn’t in a particularly large room. I also increased the font size of my browser window so people could easily see what was happening.

Also, run through your slides quickly with the projector. Projectors can have different contrast levels. I discovered that one of my slides was hard to read because the projector didn’t provide enough contrast. I quickly edited the slide before I started so that people would be able to read it.

If you will be showing things where you can’t control the font size, get good at the keyboard command for zooming in and out of that area of the screen. Practice! I give credit to one presenter who tried to do this, but quickly became befuddled with it. It is a bit confusing at first, so get comfortable with it before you use it so you can easily switch in and out.

Seriously: this was my biggest pet peeve at this event. It degraded the quality of the presentations because I couldn’t see them. And while I wear glasses, my eyesight is not particularly bad, so it wasn’t me. I even tried moving up a few rows in the room in one case, but it didn’t help enough. And I shouldn’t have to.

It is such an easy thing to do. Why not just do it?

Other things I recommend to presenters, especially technical presenters:

Practice your orientation with the screen, especially if you are going to extend the display as a 2nd monitor. That can be really confusing at first, since in some cases you may end up at a very odd angle to the display. If you don’t have a projector for practice, use a monitor. Run through you presentation at least once in that orientation.

Practice your timing. I saw one presentation where the speaker rushed through her slides. I was pretty sure that she was going to end way early, and she did (25 minutes early). Her content suffered because of it. Another presenter mentioned at the beginning he wasn’t sure how long his presentation would take, and he went well over time.

Practice in front of someone. This is so helpful, even though I really hate doing it.  I got really useful feedback that improved my presentation at least 20%.

Don’t undermine your own credibility. I realized during my practice sessions I use the phrase “I confess” or “I admit” a lot. These phrases are doing nothing for my credibility, and I’m working to eliminate them in all my presentations. The person who told us he didn’t know the length of his presentation also hurt his credibility. It made me think he hadn’t practice it. Look for things you are saying that are undermining your talk and remove them from your talk.

Get rid of your verbal tics. This is related to the previous item. One of the presenters used the phrase “I can’t stress this enough” over and over again. He said this in front of every major point. After the fourth or fifth time, it became meaningless. It was a crutch phrase, like uh or and or so (just less obvious). Get rid of it.

 Leave time for questions. I blew it on this one, too. Next go around, I’ll make sure I leave at least 5 minutes for questions and discussion.

But most importantly: biggify all the things. There is no reason not to.

Posted by Avonelle on Thursday, August 15, 2013. There are 0 Comments.

That Conference Year 2: What worked and didn’t work for me

Returned last night from my second year at That Conference. I enjoyed myself a lot more this year than last year. I wasn’t sure if it was me or the conference last year, so I wanted to give it one more year, and I’m glad I did. Here are my biased thoughts on what I like and don’t like about the event.

What I like

Overall I like the venue. The Kalahari Resort is huge and sprawling and was kind of over-whelming the first year, but it was easier this year. That may also be because I had a better room location. The hotel staff does a good job – they are friendly and personable. They responded quickly to technical issues. And overall the food is pretty good.

That Conference itself is organized by a dedicated team that does a fabulous job of making the event successful. They handled logistics really well. They adapted when they needed to. Nice, friendly, helpful people all the way around.

In addition to regular sessions, the conference also includes “open spaces”. I appreciated the space this year – it meant there was a great area to just have conversations with people and let people know you were available for a conversation non a particular topic. I’m glad they intend to continue doing this in the future. I’ll note that last year I was annoyed at how frequently the staff reminded us about using the open space. Being constantly told to get out there and talk to people was a big turn off for me. I’m not sure if I just missed them doing that this year, but it wasn’t an issue for me this go around.

The conference created phone applications for Android, Apple and Windows Phone to help navigate users navigate the venue and keep track of their schedule. The app wouldn’t install for me last year on my old Windows phone, but this year worked great for me and was very helpful. What I wish they would include in the app AND on the website is a more traditional view of the schedule. Here’s what I mean: A grid with time slots down the first left column, and all subsequent columns a different room with the title of the session in it (linking to the detailed info). I would love at  chance to be able to see a list of session titles at a particular time.

What I don’t like

To be honest, the speaker presentation quality is fairly uneven. There are many speakers who are experienced, thoughtful speakers who provide deliver their content at a very high level. There are also speakers whose speaking skills were at a much lower level. (And then there were those of us who are in the middle. I count myself in that group.)

As I understand it, That Conference uses an approach for session selection that removes the speaker name during the decision process. That means the selection is based solely on the content and quality of the abstract. I understand why they are doing this, but to be honest, I think it hurts the event overall. Good speakers can make even a topic I don’t care about interesting. If I have a choice of 2 sessions, one with a phenomenal speaker on a topic I don’t care about, or a bad speaker on a topic I do, I will often pick the better speaker. I’m happier with the experience and I gain more from it

I’m not saying that should be the only criteria, but it shouldn’t be eliminated completely from the selection process. Giving a chance to some newer presenters is okay, but those people also have other more appropriate venues for trying out their talks, like code camps and user groups. That Conference is a great value for the price, but it is a for-pay conference, and if I’m paying for something I expect a higher quality.

Also: some form of speaker evaluation would be useful for the conference over time. They could use that to help them craft a better overall conference.

Ambivalent

That Conference is promoted as a family-friendly conference. It is held at a hotel resort with a water park. They encourage you to bring your family, and they have some kid friendly sessions, too. If you have little kids – this is great. it certainly changes the feel of the conference.

From my perspective, it is a wash. My kids are grown up. I’m not interested in the water park. I’m glad it makes it easier for families (if that’s what they want), so long as there aren’t a bunch of screaming, misbehaving kids giving me a headache. So far, that hasn’t been an issue, but I can imagine that it could become one.

Perhaps the one way this family-friendly approach works well for me is that it seems to take some of the pressure off attending all the late night stuff. I don’t typically enjoy the after hours events. I don’t drink. I’m not a gamer. I find large crowds exhausting. Because so many families are there and people are doing other things, no one really questions why you skipped a particular event.

Conclusion

That Conference is a great developer event, and one I expect I will continue to attend. If you are looking for a way to combine your technical development with family time, this could be the right event for you.

Posted by Avonelle on Thursday, August 15, 2013. There are 0 Comments.

600 Workouts in a row!

Today is a major milestone for me – I’ve worked out every day for the last 600 days. I thought I would share a bit about why I am doing this, what I consider to be a workout, and how this has improved things for me.

I am a person who responds well to habits. When I can integrate a task into my every day flow, I can stick to it. But intermittent activities are harder for me to keep it going. When I started exercising regularly a few years ago, it was often hard for me to keep it up. I would skip a few days, telling myself I didn’t have time or energy or whatever, and that I would do more “tomorrow”. Then when tomorrow came, my motivation was low because my long workout seemed overwhelming.

I’m not sure when it came to me, but at some point I decided that perhaps I was doing things wrong. I decided to start working out every day, at least 10 minutes a day. If I felt like doing more, I would, but no matter what I would commit to that 10 minutes.

There is no way to convince yourself you can’t find 10 minutes in a day to exercise.

You might be thinking: but you can’t lose any weight exercising only 10 minutes a day. And you are right. So what’s the point? Remember that 10 minutes is just a minimum. The goal is really about establishing a habit. Also, even if I’m not losing weight, I’m boosting my metabolism. I’m increasing flexibility. And reducing stress.

So, what do I consider to be a “workout”? I’ve decided to only count things that I wouldn’t already be doing. So even though I walk outside with my mom twice a week, I don’t count that. But it doesn’t have to be intensive every time.

The best workouts for me are low friction. It has to be so easy to start that it requires very little set-up. I used to ride bicycle for my workouts, and I still do occasionally, but riding bike has too much friction for a regular workout. (I have to check the tires on the bike, change my clothes, put on my cleats, helmet, etc.) I’d have the same problem if I was trying to workout in a gym. Too much preparation and additional time.

So a better approach for me has been workout videos. I have a variety of DVDs and instant exercise videos on Amazon. They range in length from 10 minutes to around an hour, and they include a variety of workout types: pilates, yoga, strength training, aerobic, etc. I try to mix it up so that I’m not doing the same routines every day. If I feel lousy, I’ll do some very basic yoga poses or perhaps some simple pilates. If I feel good, I’ll do aerobics or something that pushes me more. For example, today I did 30 minutes of aerobics, and 10 minutes of yoga.

And I’ve constantly increased the minimum time. When I started, the minimum workout time was 10 minutes. These days, my minimum is 30 minutes. I’ve done that for 328 days in a row!

Tracking what I’m doing really helps. I have a spreadsheet where I log my daily workout. I note the amount of time I worked out, which workouts I accomplished, if they involved weights or a distance I include those stats too. I also write my current days-in-a-row numbers on the white board in my office. I makes me happy to see those numbers go up every day.

These days my average monthly workout length is 40 minutes. All by just starting with a commitment to do 10 minutes a day.

This may not work for you. Some people like the flexibility of workouts on a different days. Others won’t like the types of workouts that are low friction. And for others, if your focus is initially on weight loss instead of feeling better, this may not be a good fit. But for me, this has helped me to keep my metabolism up, my weight down, and I feel more flexible and relaxed.

Posted by Avonelle on Friday, August 09, 2013. There are 0 Comments.

And one more BLD / LLBLGen / View Item…

Just discovered one other item I want to remember when using views with LLBLGen and BLD: If the underlying table has a primary key defined as an Identity(), you will want to add some field mapping information in your view. Specifically you’ll want to go into the Field mappings section in the LLBLGen designer and change the “Sequence” for your primary key to @@IDENTITY.

Most things will work without this, but one thing that won’t is passing the newly generated primary key value for your entity to another form or using it in some other way.

Posted by Avonelle on Monday, April 08, 2013. There are 0 Comments.

Additional items when creating views for using with BLD

Follow-up to this post on creating views that are used with LLBLGen and BLD:

  • If the view contains a field that should be optional (in other words – allows NULL values), you may need to explicitly mark it as optional in LLBLGen. At least I had to in the case of a column that was a foreign key reference. (So perhaps that is also relevant.) Otherwise an error was generated if the user tried to save the record but didn’t select a value for that field.
  • Make sure any dependencies you add reference fields that exist. I tend to put the dependency attributes on the table entity, but if you do that and reference a field that is only in the view it will be ignored (no error).

Posted by Avonelle on Monday, January 28, 2013. There are 0 Comments.

BLD Server-side Validation Difficulties

Sometimes with BLD it will appear that a server-side validation rule isn’t working. Actually the record isn’t getting inserted/updated, but the validation error doesn’t appear. For the types of pages I build, this usually means that the user is returned to a list page, but it can also manifest itself in other ways. This is very confusing.

The actual cause is that I’m using the BLDFormView_ItemInserted or BLDFormView_ItemUpdated events to identify what the system should do after the data is inserted or updated. And this code will be executed even if the record isn’t really inserted or updated. Like I said: confusing.

The solution is that within that event, you can test for an exception. Here’s some example code:

Private Sub fvQuestion_ItemInserted(sender As Object, e As FormViewInsertedEventArgs) Handles fvQuestion.ItemInserted
    'Need to check for survey side exceptions, or it will automatically execute even though no record was inserted
    If e.Exception Is Nothing Then
      'What should happen if successful…
    End If
  End Sub

So this event should always be checking for exceptions if you are using it.

Other potential causes of validation problems are Ajax (so try turning it off) and validation groups.

Posted by Avonelle on Saturday, January 26, 2013. There are 0 Comments.

When creating views for using with BLD

Sometimes it makes sense for me to create a view to use with BLD instead of the table directly. This is usually because I also want to include a calculated field that is best calculated in the database. For example: a “CanBeDeleted” bit value for records that don’t have any associated children records.

I typically create a view, then use LLBLGen to generate an entity from that new view. There are some things I need to remember when using this with BLD (but most of these are really LLBLGen tasks):

  • Mark a primary key for the view in LLBLGen, or records won’t be editable (and in fact the “Edit” button won’t appear in your UI).
  • Identify any relationships to other tables within the view in LLBLGen. Otherwise foreign keys won’t work.
  • I prefer to create entities for the table entity also and I put most or all of my annotation attributes there. Then I use <AttributeSource> on the view metadata to copy the attributes from the entity to the view metadata.
  • <AttributeSource> copies Data attributes (business rules) but not structural attributes, like AssociationDbInfo (used for foreign keys).

Posted by Avonelle on Friday, January 18, 2013. There are 1 Comments.

When BLD DataAnnotation attributes aren’t working…

This is a reminder of things that I should double check when one of my BLD DataAnnotation attributes doesn’t appear to be working. Almost always it is something I’m doing wrong, so here are some things to check. Many of these items relate generally to .NET and how partial classes work, but is important with BLD because they don’t throw errors, just result in things not working.

  • Is the property name in the metadata the same as my LLBLGen class? Remember: with partial classes these must be exact, and it is case sensitive (even in VB.NET).
  • This also applies if it is reference to another table. For example: QuestionEntity references the SectionEntity, and it is named Section in the LLBLGen class, so it must be the same name in the metadata.
  • The BLD business rules classes and the LLBLGen classes have to go into the same project for partial classes to work.
  • Metadata classes execute no code except attributes. So calculated properties have to go into entity tables, not EntityMetadata classes.

Also a useful thing to checkout is the DescriptorsBrowser.aspx page, which will show the attributes that are being added to your entities. I’ve been able to figure out what was going wrong by checking there.

Posted by Avonelle on Friday, January 18, 2013. There are 0 Comments.

Separating Out Your Business Logic using ASP.NET Web Forms

These days almost all of the development work I do is with ASP.NET Web Forms. I’m a big fan of Web Forms – it is a technology that has helped me productively build applications for my customers for the last 10 years. However, one negative thing about Web Forms is that many of your business rules are embedded in the page markup as validation controls. Yuck.

Fortunately Peter Blum has developed a technology that solves this problem. He calls it Peter’s Business Logic Drive UI (BLD), and I’m currently using it on my latest project. BLD lets you define your business rules in separate classes, which are then used by the presentation layer to create a UI that includes the appropriate user interface, complete with validation controls that match the business rule logic.

Frankly my description of the product doesn’t do it justice, so if you are interested in this, you should definitely read more about it at Peter’s site, PeterBlum.com. But I do want to add a few remarks about it.

First, Peter’s documentation and support are second to none. You might expect that since his business is just him, the support would suck, but in fact, Peter provides terrific email support and has for years. And his documentation is outstanding. BLD’s PDF documentation is currently over 2,000 pages. Wow.

Second, if you decide to give BLD a spin, expect that it will take you some time to learn. I was already familiar with Peter’s validation controls, but that really didn’t prepare me for how different developing using this approach is. But once you get the basics under your belt, you won’t want to go back.

Third, you might find that using a code generation tool like CodeSmith or T4 to get your business rule classes started will help a lot. In my case, I use CodeSmith to generate my initial BLD classes from my database tables. My CodeSmith templates use some simple logic for adding business logic attributes. For example:

  • Date fields add the attribute for date types so the UI shows a date picker
  • if the column name includes “email” it adds an attribute so that email validation rules are included
  • If the column name includes “phone” it adds an attribute so that phone formatting and validation rules are included
  • etc.

Other than Peter’s website and documentation, there isn’t a lot of information about BLD online. Since Google/Bing tend to be the first place I look when I’m stuck, this is limiting my options. So I’ll be adding stuff I learn about BLD here, so at least they’ll be captured by the magic of the internet, even if only for me.

Posted by Avonelle on Thursday, January 17, 2013. There are 0 Comments.

ASP.NET 4.5 Optimization–Don’t forget authorization

I’m trying to take advantage of some new features in ASP.NET 4.5. One cool new feature allows you to easily bundle and minify CSS and javascript files to reduce page load times. I’ve been having trouble getting this to work, however.

It turns out the problem was that the path I generated for my CSS bundle wasn’t authorized. So if the user wasn’t logged in, they got a page without any CSS. Oops.

A quick <location> section in my web.config solved that.

Posted by Avonelle on Saturday, November 17, 2012. There are 1 Comments.

Hands on Surface RT: Initial Thoughts

Yes, I broke down and got a Surface RT today. I wasn’t sure I wanted one – my Dell Latitude ST has been serving me well as a Windows 8 tablet device. But it is a bit bulky, and the call of a tablet with a convenient keyboard was just too great. Also I want to evaluate if I think it will be a successful platform for application development. (Please forgive my blurry cell phone pictures – photography is definitely not one of my skills!)

Purchase experience

Before I discuss the device, I want to first describe the buying experience at the store, because that was not very much fun. I decided not to buy on online because I wanted to actually experience both the touch and type keyboards before selecting one. When I first arrived at the store, there was a line around the corner so I immediately got in line. Then I learned the line was for purchasing the Surface only so I went into the store to look at the device and try out the keyboards. That’s when I learned that purchasing the device could take a while. Not only did I have to wait for everyone in front of me, but they were walking each user through setting up a Microsoft account and setting up their device! I asked ‘isn’t there a special line for people who can do that themselves and just want to swipe their credit card?” “No.”

When I got back in line, I realized it wasn’t really moving at all. The line sat in the same place for more than 30 minutes. Only when people started complaining did it start moving. My personal view is that this whole approach was setup to generate hype. Wow – people are standing in a huge line, it must be for something good. Even if it wasn’t for nefarious purposes, it was shameful how long it took before it was moving. Perhaps it was a training issue for Microsoft staff. Once I got to the front of the line the person who actually took my card seemed fairly slow at walking through the purchasing software.

I don’t mind waiting in line for my turn. But when your line isn’t moving in a normal timeframe, you need to assume that something is broken. Employees at the store ranged from sympathetic (“I’m very sorry – I think this is lame too but corporate is making us do it this way”) to complete useless (“this is the process we have selected and I’m sorry it upsets you.”) Nice non-apology there, lady. You should go into politics.

They plied me with Microsoft store gift cards during at the end of the purchasing process to soften the experience, but since it appears they can only be used in a Microsoft retail store I can’t imagine taking advantage of them. Why would I ever want to go back?

In my opinion, Microsoft doesn’t understand how to properly run a retail store. That’s okay if their stores are just about promoting Windows and Office with third party hardware. But if they actually want to sell their own devices, they need to get their act together.

Packaging

The packaging for the device is attractive. I got the 32gb touch keyboard bundle, so it was all in one box. There was what appeared to be scotch tape in a few places that looked a bit odd, but overall it was pretty.

Surface box

Setup

Setup was pretty straightforward, especially having been through the Windows 8 installation experience before. Harder to say how it will be for others. I already had a Microsoft account, so I knew which email account I wanted to connect it to.

Surface Getting Ready

Scary moment

At one point shortly after set-up I got the blue frowny-face of doom – the Windows 8 version of the “blue screen of death”. Yikes!

Surface Blue Frownie Face

I’m not sure what happened there, but I will say that during setup I wasn’t in a spot that had the best connectivity. Still, I wouldn’t have expected this type of fatal error for something like that. I haven’t seen one since, but it was a bit disconcerting!

Touch keyboard

Honestly: the keyboard feels *weird*. All the keys are in the right place, but it will definitely take some getting used to. In the store I had very little trouble typing with minimal errors. In regular use I’m finding that more challenging but it is getting better. I tried using it in the dark this morning – that was pretty much a fail. Perhaps as I get better that will be possible. I’m a touch typist so if I can get my fingers in the right stop I’m usually okay. I seem to be having the most problems with the space bar, but that seems to be improving slowly. Online reports suggest it takes 4-5 days to get comfortable. We’ll see. In the store it was clear that the “type” keyboard had a superior typing experience, but since it added weight I decided to go with the touch keyboard.

The keyboard has a built-in track pad so you don’t have to touch the display for navigation if you don’t want to. That was a pleasant surprise to me – there are times (especially when using something like Microsoft Word) that navigating via touch works less well.

The keyboard has buttons on it for the Search, Share, Devices and Settings charms, but not for the charms bar itself. Frankly I don’t see a lot of point to the Devices and Share buttons – I never use them.

Lap use

One of the questions in my mind was “can I use this device with the keyboard but without a tabletop?” the answer is: possibly. I’m tying this from bed, with the kickstand out and leaning on my legs. I also had it working in my lap last night while watching TV, but the kickstand gave out on me once and the device fell over. Oops.

Built-in apps

In addition to the standard Windows 8 apps available on install, the device comes with preview versions of Office 2013. To be honest, this was one of the biggest disappointments to me. The version of OneNote that is installed doesn’t include voice recording. I use OneNote all the time. On my desktop I use my keyboard but when in meetings I typically use a pen and record the audio. The Surface RT doesn’t come with a pen (the display does not include an active digitizer) and the OneNote 2013 Preview doesn’t have the ability to record audio. This makes it less than ideal for one of the primary use scenarios for me for a mobile device.

I thought the lack of an ability to record audio within OneNote was simply a limitation of the preview (to be fixed later) or perhaps that it was a limitation of the student/home version. However, it appears to me that this isn’t something that can be changed. It says this in the online information about OneNote 2013 RT:

1. Audio and video recording

Recording audio/video notes from inside OneNote 2013 RT is not supported. Instead, you can record audio or video with other software, then insert it through Insert → File to add onto the OneNote page.

One of the lovely features of OneNote 2010 is that if you are recording audio AND taking notes simultaneously, when you playback you can see what notes you were writing for each section of the playback. Recording the audio separately and then inserting it into OneNote won’t give you that capability. Very disappointing.

App store

A lot has been made in the press about a lack of Surface RT apps. Certainly I haven’t found every type of app that I’m looking for. For example: I haven’t yet found a good tool for blogging. I expect that will improve over time. It is an opportunity for developers if the platform takes off. Will it? My guess is that it will be successful enough, but only time will tell.

Comparison

Is it better than the iPad? Well, it is a different device, best used in different usage scenarios. The iPad is great for consuming content – reading your email, surfing the internet, watching video. It does less well at creating content. Firing off a short email is okay, but otherwise the on screen keyboard is painful. Surface RT is better for people trying to create content, especially text-based content like documents and emails. I even prefer it for reading blog posts – I use Google Reader for reading blog posts and I prefer navigation via the keyboard shortcuts. It makes me crazy to use a device without a keyboard for that. But YMMV on that one. It is also lovely to be able to pop in a USB stick.

Still it is too early to say if I will want to use it for all my mobile computing. If I was spending a few hours in a coffee shop doing some read/writing, then the Surface RT would be great. But for taking notes during meetings, I may still carry my Dell Latitude ST running Windows 8. It is a bit bulky, but I can use a full version of OneNote that allows me to record audio and take notes via pen input. 

Bottom line

If you are looking for a mobile device that allows you to do more than just consume content, then the Surface might be a good choice for you. Before you buy, however, spend some time thinking about your typical mobile usage scenarios.

Posted by Avonelle on Saturday, October 27, 2012. There are 0 Comments.

Gone fishin'

Grandpa_Al_100My grandfather Al Willingham passed away this morning. He was 104.

It is customary to say nice things about people who have recently passed away. In grandpa’s case there are ONLY good things to say about him. He was a good man. An amazing role model. He loved his family, his friends, his church and Jesus.

Grandpa lived an extraordinary life of ordinary events. He lost his mother as a teenager, lived through the depression, and had more jobs than I can count. He raised 3 sons and 1 daughter, and buried two wives. These by themselves are not unusual things. But grandpa took these many events, examined them, and found lessons from them. And then he shared those lessons with us, inspiring us to be better, too. He didn’t complain about the challenges in his life. He thanked God for his blessings, and learned from the difficulties.

Grandpa was something of an inventor. He loved to solve problems. When he was able, he would build things, repair cars and appliances, and generally troubleshoot anything. As his mobility decreased, he became the general contractor, putting others to work on his projects. He had a lot of ideas about how to make things more convenient for people like himself, struggling with seemingly simple tasks because of his age and health. Instead of giving up when life presented a challenge to him, he analyzed it and tried to figure out a solution. His apartment was filled with inventions that made his life easier, even a tiny bit.

Sometimes when poor health comes, people give up. Not grandpa. He worked hard to keep his mind and body as active as possible. Until very recently, he still did regular leg exercises in his bed, and used some stationary bike pedals to keep his joints flexible.

Grandpa Al was a gifted storyteller. He talked about his many jobs during the depression. He described reading in the newspaper that his deputy sheriff father had been shot in a jailbreak (he was okay).  Sometimes he told a joke dressed up as a true story, but mostly he talked about his life. His stories were filled with humor and truth. His chicken story was legend. In the last several months, his poor hearing made conversation difficult. But he could still tell a story. And he did, painting pictures with his words of his life that were fascinating and inspiring.

Grandpa told me Saturday he thought he’d “be fishing with God” soon. I’m so grateful to him that he gave me that last gift – a beautiful vision of him that I will cherish always.

I hope he catches a big one.

Posted by Avonelle on Tuesday, March 27, 2012. There are 2 Comments.

Someone changes your estimate?

I shared my talks on estimating and going independent at the Society for Women Engineers last weekend. There was one question from the audience during the estimating talk that really got me thinking. The person described their situation, which was that another department would request an estimate for some work from their department, their group would produce a thoughtful estimate, and then someone in the requesting department would alter the estimate substantially, often cutting the number in half. Then their group was just told to “live with it”.

Unfortunately, this situation had led to the group starting to double their numbers, just so they break even. That is a bad situation all around.

I didn’t have much of an answer during the session, but after considering the problem more, here’s how I would handle it:

First, I would meet with the other department. If it is just one person who is responsible for making these arbitrary changes, I’d only meet with them. I’d ask them in a non-threatening way why they think they are better at estimating my work than me. I’d bring statistically data that demonstrated why this was less accurate. I’d also point out to them that I felt no obligation to attempt to meet their changes, and that this was an unacceptable situation.

I’d point out to them that this was disrespectful and unacceptable. At a minimum, there should have been a discussion about the numbers and how I arrived at them, not just arbitrary changes.

At this point, you could expect one of two things to happen, I think. Either the person will take it seriously and promise not to do it again. OR they will blow you off.

If they don’t take it seriously, then you have the choice of living with it, escalating it to someone else, or looking for new work.

I realize there are no easy answers to this. But I’d have a serious conversation about it that was non-emotional and focused on the issues. My guess is that, in some cases this would be successful.

Posted by Avonelle on Monday, March 12, 2012. There are 0 Comments.

ASP.NET Session State in a shared hosting environment

To be honest, I have almost no experience with applications running in a shared hosting environment. Most of my clients completely control their web servers, and it is much, much easier to support.

But I do have one customer whose app is on a shared server. Previously it was on a fairly crappy hosting company, but recently they made the switch to HostGator. I think HostGator is probably pretty good, but it is challenging for someone like me who has not had to deal with restrictions on some of the server settings.

When we upgraded their app to ASP.NET 4.0, we started seeing session time-outs at 5 minutes. This application involves entering financial data from tax forms, and the users are generally new to the app. Five minutes simply wasn’t enough time for many users to find and enter their information. As it turns out, the problem was the Idle Time setting for the application pool – it was set to 5 minutes, and it wasn’t an option to change it. Crap.

After some research, it appeared to me that if we switched from InProc sessions to a SQL server session server, we could avoid this problem. I made the change to my test server, and it seemed like the app pool Idle time was no longer affecting session state. (Of note: the SQL Session State Server scripts want to create a SQL Server job, which isn’t possible in shared hosting either. I found this post useful for getting around this.)

Then we implemented the same change on the production site. Users were still getting knocked out of the system when they were inactive for more than 5 minutes. What?! I was pretty annoyed.

Then I ran across this StackOverflow answer, and I was able to solve the problem. It also explained why it was working on my test server and not on the live server – the test server had a <machineKey> section in the web.config, but the live server did not. So the problem was actually not session itself, but an expiring forms authentication ticket.

I hope this helps the next guy. I had a lot of problems finding explicit answers via my Google-fu about how to solve shared hosting limitations with ASP.NET session state.

Posted by Avonelle on Friday, December 09, 2011. There are 0 Comments.

#shesgeeky 2011: Why I love it

If you follow me on Twitter at all, you know I adore She’s Geeky. She’s Geeky is an unconference that just wrapped up its second time coming to the Twin Cities. Because I got so much out of last year’s event, I worked hard to convince colleagues and friends that they should come this year. I was mostly unsuccessful, except that I brought my 13 year old niece on day two (and she was immediately hooked!)

Having attended both days this year, I want to see if I can express more clearly why She’s Geeky is such a useful event to me, and why you should consider attending next year.

Geeky careers can be isolating

This is true on different levels. For example, some jobs themselves are naturally isolating, like my freelance programming job. Women who work at geeky jobs are often the only woman in their group/project/department, which can be isolating in a different way. And if your job involves interacting with non-geeky people, then you may feel alone and isolated in still another way.

She’s Geeky helps to combat that by helping you to connect with people who you have some commonalities with.

Have the conversations YOU want

How many times have you attended a conference and wished they had a session on a particular topic? Or have you attended conferences where the most valuable part of the event was the conversations you had between sessions, not the session itself?

At She’s Geeky, if you want to have a session about a topic, you suggest it. If others want to talk about it too, they’ll show up. Even if you know nothing about the topic, you can suggest the topic as a question or explain that you are hoping to learn more about it. I attended a session on setting pricing for web work, because the session convener was looking for advice, and I felt I could contribute something to that discussion. I ran a session on trying to get more women speakers at tech events, and got some good feedback about what might work or not work. This was very valuable to me.

The conversations are safer also. One of the sessions I attended this year was on imposter syndrome, the problem many of us have that we fear we just frauds, and that someone will soon figure out that we are frauds. This problem is not specific to women, but is more frequently held by women, and women deal with it in a different way. If a man feels insecure, he will often puff himself up more. When women feel insecure, they tend to apologize. This is a session probably would not have happened in a mixed gender situation. I think many women wouldn’t have been comfortable admitting that feeling in front of men.

You ARE geeky enough

Sometimes when I try to convince women to attend She’s Geeky, they tell me they aren’t geeky enough. FYI: you are probably are. Look, there were conversations at She’s Geeky this year on manga, digital art, and video games. These are all topics I have no interest in. That doesn’t mean I’m not a geek. There were also sessions on dealing with failure, starting a business, and management tips for new managers. Do those sound too geeky for you?

My point is: the conversations that happen are what YOU want and need. It is okay if you don’t like Star Trek, or don’t have the periodic table memorized. Really. You’ll still fit in.

Are segregated events a bad idea?

I’ll admit, before attending She’s Geeky for the first time last year, I was a bit suspicious of events that only included women. I personally have little interest in sitting around talking about how “oppressed” women are, or whatever. And I’ve heard it argued that women-only events are ultimately bad for women, because they are segregating themselves. Honestly: would we be comfortable with a “He’s geeky” event?

Good question.

Here’s my answer: Guys probably don’t need a He’s Geeky event, because as a significant majority in STEM fields, they don’t experience the challenges of being in the minority. So a He’s geeky event would feel like guys trying to exclude women for no good reason. But turn it around: my guess is that there are very few male elementary school teachers and nurses. They probably have unique concerns from their female counterparts in their fields. They might need a “He Teaches” or “He Nurses” event, and that would be completely understandable to me. I would think: good for them.

Further, I want to make something clear: to my great relief, none of my She’s Geeky experiences have been women trashing men in any way. There have been frank discussions about gender differences, and certainly some conversations about whether some of those differences originate via nature or nurture, but this isn’t a hen party. It isn’t gossipy or whiny. And it is usually practical discussions. How can I solve X problem? How should I handle Y situation? How can I make Z better?

Summary

Thanks to the sponsors and volunteers who made She’s Geeky 2011 happen. It was a great success. I can’t wait until next year!

Posted by Avonelle on Monday, September 26, 2011. There are 2 Comments.

I don’t want your help

The famous Michael Arrington post about women in tech and several of the comments and blog responses have been rolling around in my brain all day. There were some thoughtful insights as well as some really stupid responses on all sides of the argument.

I don’t know if the reasons are nature or nurture. Personally, I don’t feel like I’ve been the victim of discrimination. And I don’t think we will ever see 50/50 gender representation in tech fields and that really doesn’t bother me. I like to educate girls about the opportunities available in technology, because I think young women eliminate tech from their career options for false reasons, like that they won’t be able to interact with humans or that they will spend every day completely at a computer.

But here’s what I do know: I really don’t want any “help”. Men trying to “help” women get noticed because they think women can’t do it on their own. Men holding special recruiting drives to find more female speakers. Men trying to be more “inclusive”.

Ick.

Doesn’t it feel condescending and yucky? It sure does to me.

If I’m writing something useful and smart, someone will find it. If they don’t, perhaps it is because I’m not promoting it very well. I certainly don’t want any charity promotion from someone. If you think it is good, then tell people. If not, ignore it. Fine by me.

Small addendum: Women who complain that people who disagree with them on the internet are “raping” them DO NOT SPEAK FOR ME, and in fact make me ashamed to be female. Really. (Even if you are being called filthy names or threatened, it is not the same thing AT ALL, and makes you sound like an idiot.)

Posted by Avonelle on Monday, August 30, 2010. There are 1 Comments.

Mistakes happen when you don’t know what you are doing

Here’s an example of how I screwed something up because I didn’t really think through HOW something worked. I’ve got a table of street addresses that currently has two columns for latitude and longitude values stored as doubles. Since I’m working with SQL Server 2008,I decided I wanted to create a new column for storing the data as a Geography data type so that I could perform some spatial functions on it.

So first I had to write the query to update this new column. And this is where I made my mistake:

update tblAddress set CenterPoint = (geography::Parse('POINT(' + str(longitude) + ' ' + str(latitude) + ')')) where Not latitude is null

Do you see it? I thought that rather than using the CONVERT function, I would just use STR to turn the longitude and latitude values into strings. Unfortunately, using STR as I used it rounded my values to integers. Not that useful when we are talking about values that look like this: 44.9072249

The result was that all my addresses (which are pretty much in the Twin Cities) had the same value in the new Geography column. Oops.

Just thought I’d share for the next guy. (Yeah, probably a waste of time because none of YOU would ever do anything so lame.)

Posted by Avonelle on Monday, August 23, 2010. There are 0 Comments.

Expanding VM boot disk size in Windows 2008

I found the instructions on this site worked very well for increasing my VM boot disk size:

http://d3planet.com/rtfb/2009/09/21/increase-vmware-workstation-virtual-disk-size/

Most important thing for me: the diskpart command worked for me with a Windows Server 2008 VM. It did NOT work for me to attach the drive to another VM, as when I tried to boot my original VM again the virtual disk was hosed. As I recall, this is a problem I’ve had in the past.

Posted by Avonelle on Wednesday, June 09, 2010. There are 0 Comments.

Awesome script for shrinking a SQL 2008 database log

Posted by Avonelle on Tuesday, May 25, 2010. There are 0 Comments.

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. Next page