Expand Cut Tags

No cut tags

20 Years

Oct. 14th, 2016 07:35 pm
ggreig: (Dark Wizard)

Blocks signifying 20 years at InsightsOn the first of October, it was 20 years since I started work at Insights, and today I got my fourth block signifying a period of 5 years service.

When I started at Insights, I was the first developer through the door (I was joined by a colleague the next day) and the total number of direct employees of the business was smaller than the number of people in the department I’m in now. Now we’re a medium-sized international business, working with some very large businesses indeed, and all still heavily reliant on the software I’m involved in building.

Not counting founders (one of whom currently sits across the desk from me) there are a couple of people who’ve been with the business longer than me. In one case, 26 years! Still, 20 years seems like a long-ish time.

Yesterday I had lunch with other members of my team, and I have a couple of lunches with more senior people coming up in the next couple of months. I also have to decide what form I want to receive a gift in. (Thinks: I have a handy list of 28mm models I’d like…)

Whatever happens, what with having spent a relatively long time in further education, that’s more than half my working life spent at Insights – if I stay here until I retire, I’ll only earn another 3 blocks.

ggreig: (Dark Wizard)

Today is World Porridge Day, which is being promoted by Mary’s Meals. Mary’s Meals provide a daily meal of maize porridge (likuni phala) to some of the world’s poorest children. It makes a bigger difference than you might think – for many children it’s the meal that allows them to attend school.

Insights, where I work,  supports Mary’s Meals, and today there are some themed activities and people were encouraged to wear tartan. You may remember Mary’s Meals was the charity supported by Martha Payne, who blogged about school dinners in Argyll a few years ago as NeverSeconds.

Wearing tartan with Fraser Paterson 
Wearing tartan with Fraser Paterson

Not sure I’ll actually be indulging in any porridge as I hate the stuff, but I’ll be seeing what else I can do.

Donate to Mary's Meals.

ggreig: (Western gentleman)

On Friday we were encouraged to come to work appropriately dressed for a Cowboy vs. Aliens Nerf battle.

Me as a cowboy with a belt-fed Nerf machine gun

ggreig: (Western gentleman)

National Bow Tie Day 2015

National Bow Tie Day 2015
(in the US, but we’re an international company)

ggreig: (Western gentleman)

Wear It PinkFriday was Wear It Pink day, in aid of the fight against breast cancer. Usually my contribution to these things when they pop up at work is limited to that – a contribution – but this time I was marginally more organised than usual. I don’t possess any pink clothing but it occurred to me there was something else I could “wear pink”.

There has to be a benefit to going white…

A while back I decided that occasionally it might relieve the boredom to try a different beard colour; a few people have seen me in blue, but Friday was a bit more high profile. Don’t expect it to be a regular thing, and even less so at work, but if I feel like it…

A bit of research turned up Manic Panic’s Dye Hard as a respected brand that washes out easily. For the pink, as a paler colour than the blue I’d tried before, I actually applied white first (to cover the darker patch remaining on one side of my beard) before applying the pink on top.

The colour combs in easily, and the odd over-enthusiastic application will mostly just wipe off, though it is possible to apply it a bit heavily and wind up with colour on the skin behind the beard. It dries quickly and is good for the rest of the day.

You do have to be a bit careful with a moustache, which should be well-trimmed – otherwise you run the risk of having the colour wash off in drinks, for example. Depending on what you want, you may be best not colouring the moustache. While I went for complete coverage in pink, the contrast between a blue beard and white moustache is quite effective.

The colour also helps with hold once it’s dried, so it’s fairly easy to stay tidy-looking. When the time comes to wash it off, it is really easy to get rid of – a couple of splashes and a bit of a scrub and it’s gone. In fact, it’s so easy to remove I was a bit concerned about being caught in the rain, but I didn’t have any problems in practice. I took the tube and a comb along in case touching up was required, but they weren’t called upon.

Work posted the picture above to the company account on Instagram and I received an e-mail today saying it had got their “best ever response to a picture” – defeating the previous champion, a picture featuring a cute puppy, by a respectable margin.

ggreig: (Western gentleman)

One of the team who’s leaving today created these:

Insights Core Development Team - in Lego

See if you can spot which one’s me…


Feb. 3rd, 2014 08:54 am
ggreig: (Western gentleman)

Sunrise over Discovery Point, Dundee

Taken on the way in to work; sunrise over Discovery Point, Dundee.

ggreig: (Western gentleman)
The founder of the company I work for has an unprovable but reasonable claim to having originated the term "Beatlemania".

There's an article in the Observer about the phenomenon that opens with some of Andi's memories.
ggreig: (I Need Dis)

…that the World Wide Web entered the public domain. I’m pretty sure I first used it later that year when I returned to university in Dundee (along with ever-more-occasional Gopher use).

By the time I was looking for a job three years later, the Web was so much of a part of how I worked as a developer that I dreaded the possibility of working for a company that wasn’t connected. Luckily, that didn’t happen, although all we had was a 28k modem – with a timer on the power socket so that it cut off outside working hours and therefore kept the phone bills down.

ggreig: (Judge Greig)

There’s been quite a lot of attention paid to the new user interface in Windows 8, especially the Start Screen that’s replacing the Start menu, but perhaps if you’re a web developer you’ve been thinking none of this has much relevance for you.

Whether that’s actually right depends a bit on what sort of devices you’ve been targeting up until now.

The desktop environment you’re used to still exists in Windows 8 (more or less) but there’s also a new type of application called Metro-style Windows Store apps. By default, these run full screen, with much of the usual user interface hidden away so that, in the case of a web browser, almost all you see on screen is the page content.

Internet Explorer, if launched from the Start screen, will open as a Windows Store app by default, so you’ll start browsing full screen. Chrome, Firefox and Opera have each indicated that there’ll be a Windows Store versions of their browsers, so what follows will also apply to them.

Most commentary on Windows Store apps has tended to stop there, with the app running full screen, and gone on to talk about how you interact with it.

What hasn’t been commented on quite so much is what happens if you want to have more than one app on screen at once.

Although you can launch several apps and switch between them, the most you can display simultaneously is two apps side-by-side, as in the following picture, where you can see the BBC home page in Internet Explorer on the left, and a weather app “snapped” on the right, with the two separated by a black splitter bar:

IE in fill view on the left, and a weather app in snapped view on the right.

You can click through the screen shots to see them full size.

Internet Explorer on the left is basically the web content, with an address bar and a few other things visible at the bottom of the screen. The weather app on the right displays the current weather and forecast weather for the next few days vertically down the side of the page. Nothing too challenging about that so far.

The weather app is a native application – not a web page – and it’s displaying in the snapped view. Internet Explorer is now displaying in the fill view, rather than full screen, but there isn’t a big practical difference between the two. Snapped view is another story though.

A window in the snapped view is a fixed 320 pixels wide – no more, no less – and runs from the top of the screen to the bottom. It can be snapped to either the right of the screen or the left. It’s only available for screen resolutions above 1366x768 – if you have a lower resolution, running Windows Store apps full screen is your only option, with no way to display them side by side. Fill view fills everything except for that 320-pixel-wide strip.

All Windows Store apps are required to support the snapped view, and as you can see the weather app does so clearly enough. As this version of Internet Explorer is also a Windows Store app, it’s require to support snapped view too. Let’s see what happens if we move the splitter bar across to the left so that IE is in snapped view and the weather app is in fill view:

IE in snapped view on the left, and a weather app in fill view on the right.

Note that the weather app’s adjusted to make use of the space available to it (there are more interesting and practical examples of Windows Store apps, but I chose the weather app because the information in it’s innocuous). IE has also adapted; it’s now displaying the BBC home page 320 pixels wide.

If you’ve taken a responsive mobile-first approach to designing your site, using media queries, then your pages may appear OK. If you haven’t, you’ll get a 1024-pixel-wide rendering of your site scaled down to 320 pixels wide. Here’s how that BBC site looks, full size – not particularly usable:

BBC site at 320 pixels wide

Windows 8 is a game changer for web development, because it means that “mobile” design is no longer restricted to mobile devices. 320 pixels wide is narrower than many phones (though certainly not all – link via [livejournal.com profile] andrewducker). The Windows Store app version of IE is what your users will get by default when launching IE from the Start Screen, and even if there’s a push back against this, it can be guaranteed that some proportion of your audience will prefer to browse this way (and this will presumably become true for other browsers too in due course).

It’s true this’ll only be an issue when a Windows Store browser window’s snapped. Your users won’t be affected if the browser’s full screen, nor if it’s in fill view; and if they use the desktop version of the browser rather than the Windows Store version everything will be as it was in previous versions of Windows. Remember though that they may not think much of your site if it forces them into using their operating system in a particular way.

Think of it like this; if your site isn’t designed for mobile, you’re now accepting that some of the time it’s going to be unusable on Windows too.

Here’s some specific advice on how to start responding to this change (also pay attention to the helpful comment from Karl Dubost of Opera Software).

ggreig: (Default)

Sometime this month, I think I passed the milestone of 20 years of owning a PC.

I wasn’t particularly exposed to computers while I was school, nor even much at university. A friend had a BBC micro, on which I played Elite a few times, and I learned to write S-algol on the University VAXen. The closest I came to a PC was one Physics lab that required me to write a little Basic to control a stepper motor.

Then I did a conversion M.Sc. to Computer Science, and then I was unemployed.

After nearly a year of unemployment, the bright future of work as a programmer I’d hoped for looked like as though it might be escaping from me.

I thought I’d better do something about it, and with a loan from my parents and advice from my friends I bought a PC, to demonstrate that I was serious about these computer things. In particular I was grateful for the advice of [livejournal.com profile] flybynightpress, a Mac enthusiast himself, who advised me not to get a Mac but a PC, because the employment prospects were better. You tend to pay attention to advice like that!

That PC was a Viglen (pre-Lord Sugar), with a 386DX processor, 4MB of RAM, and a 125MB hard drive, with the (then) brand new Windows 3.1.

Sometime in June or July, I had a horrible experience when it stopped working. Completely. My first computer, bought with money I didn’t have, bricked. and with that horrible paranoia that maybe, oh no, maybe it was all my fault!

A technician had to come the hundred and something miles from Edinburgh to the glen where I was living with my parents on the west coast, with me liable for the several-hundred-pound cost of the callout if it really was my fault. That was not a happy wait.

Luckily, the motherboard had died of its own volition, and with a replacement fitted free of charge, that PC served me well for a fair while afterward. And a month or two later, I was employed as a programmer, albeit in a job paying only 65% of the average graduate starting salary of the time, and with the most horrible computer language in the world ever. And on a PDP-11/83, not a PC. Still, I’m sure my PC-ownership helped ;-).

Today, my Raspberry Pi arrived, both more and less powerful than that machine of twenty years ago, depending on how you look at it. Unfortunately a painful ear infection is making the thought of tinkering unappealing for me tonight; but hopefully the Raspberry Pi will be the gateway for others to follow in the career that the PC has let me enjoy.


Mar. 14th, 2012 12:17 pm
ggreig: (Default)

I can identify with quite a lot of this article in which the Grauniad stands up for ’em.

ggreig: (Default)

There’s a partially justified tendency among software developers to say “Eeeewwww!” when the subject of Hungarian notation – a naming scheme for variables – comes up. It’s fair to say it has a bad name. I don’t like it either, in its most common form; but I said “partially justified” because it isn’t a simple open and shut case.

What people tend to think of as Hungarian when deriding it is Systems Hungarian; where variable names are prefixed with something identifying the type of the variable. This is how you wind up with identifiers like szName or even lpszName, where that indicates a long pointer to a zero-terminated string (piece of text) containing a name. As you can imagine, code with a lot of that sort of stuff in it can become a bit tricky to read. When the variable names are dancing before your ideas, you know it’s time to take a break. Let’s not get into what long pointers are, and use szName for our examples from here on.

It’s also a bit fragile, because if you change the underlying type (say from an int to a double, when you realise that you need to store a real number rather than an integer) and you forget to change the variable name at the same time, then your “self-documenting” code is suddenly no longer quite as helpful as it was.

The Systems Hungarian style was used by the Microsoft Windows development team, and will be recognised by anyone who’s had to deal with the Windows API.

That’s not where Hungarian notation began though. It was originally proposed while working at Xerox PARC by Charles Simonyi,  who was born Simonyi Károly in Hungary (Hungarian surnames come before given names). Simonyi later moved to Microsoft, where he became Chief Architect. You can read the content of the original, fairly short proposal in the MSDN library.

Simonyi’s version of Hungarian notation, which was used by Microsoft’s applications division, later became known as Applications Hungarian to differentiate it from the Systems Hungarian developed by the Windows development team.

Applications Hungarian takes a slightly different approach to choosing those prefixes. In Applications Hungarian, the prefix is meant to encapsulate some semantic information about the variable – it’s meant to give some idea what the purpose of the variable is, rather than exactly what type it is. For example, Applications Hungarian would prefer strName to szName, because all you need to know for most purposes is that the name is a string rather than needing to know exactly what type of string it is (many different implementations of strings exist for C/C++).

This emphasis on semantics helps to convey more information the variable and how it is expected to be used than just its type. Another example from would usName: the us prefix indicates that the variable is an unsafe string (probably user input) and that it needs to be checked carefully before it’s used.

Applications Hungarian is also a bit less fragile than Systems Hungarian, because the information its prefixes contain is less likely to be invalidated by changing the underlying type of the information. To use the name example, you could switch to a different string implementation, but you would still have a string containing a Name.

However, both Systems Hungarian and Application Hungarian share the flaw that they can be a bit cryptic and difficult to read, especially with a proliferation of prefixes. Both have fallen out of favour for this reason, and even Microsoft recommend against use of Hungarian notation when coding against the .NET framework which has been introduced since 2001.

When Insights moved from C++ to .NET development in C# in 2005, we wanted to come up with a naming convention that would comply with Microsoft’s recommendations, but also contribute to the expressiveness of our code. What we came up with was what I’ve decided to call Anthropomorphic Hungarian.

Microsoft’s recommendations for naming variables and parameters – which you can read in more detail if you wish – at their simplest boil down to:

  1. Use Camel Casing
  2. Don’t use Hungarian notation

Strictly speaking, Camel Casing here means lowerCamelCase, in which the the first letter in the first word of a compound variable name isn’t capitalised. Its sibling, UpperCamelCase, in which the first letter in the first word is capitalised, is used for other purposes and is referred to as Pascal Case. We’re not discussing the situations where Pascal Case should apply.

Although Hungarian notation is fairly unequivocally deprecated, lowerCamelCase has a couple of significant drawbacks. It tends to de-emphasise the first word. Using the example of lowerCamelCase itself, this is unhelpful because “lower” is actually the most significant word in the name; the one which differentiates lower camel case from upper camel case. Also, what happens when your variable name is a single word and not a compound word? The resulting variable name entirely in lower case looks a bit incongruous and out of place. Small speed bumps like this can have a surprising effect on the readability of code.

Anthropomorphic Hungarian aims to satisfy the Microsoft guidelines, provide some semantic information about variables, and improve the readability of the code.

To do this, Anthropomorphic Hungarian follows these principles:

  1. It uses a very small set of approved prefixes. One of the things that can go wrong with semantic prefix schemes is that the number of prefixes expands to cover more and more unforeseen types of information, and ultimately the scheme conveys less information as the list of prefixes becomes too difficult to stay on top of.
  2. Although not quite all Anthropomorphic Hungarian prefixes are made up of English words, English words are strongly preferred; sometimes the sort of words you might use if you were trying to explain the code in speech. This increases the readability of the code.
  3. The prefixes should encourage developers to make the rest of the name useful, by starting with English words that can lead into something more expressive.
  4. The prefixes must be short. They should add meaning and ease of reading to the code without being too onerous to type, or taking up too much space.
  5. The prefixes must not contain primary information about the purpose of the variable; they’re a way of recording a small of amount of useful, but secondary, metadata. As a result, it doesn’t matter that lowerCamelCase tends to de-emphasise the prefix.
  6. The prefixes are largely, though not exclusively, concerned with scope – where the variable is declared and therefore where it can be used. This is a usage of the older forms of Hungarian that developers are notably reluctant to give up with regards to prefixes for class member variables, and it is also useful in other circumstances.
  7. Classes and interfaces are anthropomorphised. This is the most distinctive feature of Anthropomorphic Hungarian, and the source of the name.

Without further ado, here are Anthropomorphic Hungarian prefixes as used at Insights. As you’ll see, most prefixes are only two or three characters, with a rare maximum of four:

Anthropomorphic Hungarian Prefixes
Prefix Meaning
the A local variable within a method.
in A parameter that is only passed into the method.
my A member variable of a class. It’s “my” variable from the point of view of the anthropomorphised class.
a/an A member of a collection or a loop control variable (often these are one and the same thing).
ui/ux A member variable of a class that represents a user interface control. We agreed on ui, my personal preference is ux. This is an example where the prefix is not an English word.
ICan Not for a variable in this case. There are two possible descriptions of the service that an interface provides to a class that implements it. This one, which is usually preferable, is for an interface that provides a particular behaviour.
IAmA/IAmAn Sometimes an interface is defined in such a way that it’s more like a base class than a description of a service. This prefix will be more appropriate for those cases.

The prefixes for interfaces meet the Microsoft recommendation that the names of interfaces should begin with “I”, but encourage more expressive interface names. When a class implements an interface or interfaces, the interface names in its declaration form a positive statement in English on the part of the anthropomorphised class as to what contracts it satisfies.

Here are a few prefixes that were also agreed at some point, but are seldom or never used:

Seldom Used Prefixes
Prefix Meaning
is A Boolean value, with the main part of the name expressing the true condition.
loop This prefix was agreed for loop control variables, but in practice a/an has almost always been preferable.
out This prefix was agreed for reference parameters which are only used to pass information out of the method.
io This prefix was agreed for reference parameters which are used to pass information both in and out of the method.

Much of this isn’t original. “a” has appeared as a popular prefix in SmallTalk for many years, for example, and my thanks to [livejournal.com profile] tobyaw and [livejournal.com profile] qidane for introducing me to "the"; but I think that pulling all these together into a fairly tight little convention is novel, and has proven quite successful. It’s not always immediately popular with new developers, but it seems to be something people come round to with a little experience of it.

ggreig: (Crazy or smart?)

Yesterday I left Stagecoach £42 poorer after paying for my four-weekly pass. That is, it’s Stagecoach that were poorer, not I, which is the right way around. The cost of my pass has dropped from £133 to £91, which I am finding pretty difficult to complain about.

The price of my commute has gone up quite a bit over the last few years, but this hefty reduction – almost a third – is so welcome that I’m prepared to overlook the likelihood that they can afford to do this because they’ve been ripping me off for the last few years!

All I’m losing is “free” trips to Glasgow; as well as my commute to Dundee, the pass will still take me to all sorts of other places I seldom go, like Edinburgh, Stirling, Falkirk and anywhere in Fife, Kinross and Clackmannanshire.

Better say this now, because the opportunity is unlikely to arise again: I ♥ Stagecoach.

ggreig: (Default)

Just been given two of our inaugural long service rewards; due another one next year…

Two solid metal bricks, representing 5 and 10 years of employment at Insights

The longest serving current employee’s 18 years, 4 years ahead of me.

ggreig: (Default)

Snow in Kingsbarns

Always nice to wake up and find the place looking like Narnia. Working from home today.

ggreig: (Astronaut)

I finally have a fully operational Windows Phone, following its arrival on Friday. The delay is not the fault of the phone, I hasten to say, it's due to unfortunate timing and mistakes made by the provider. I won't dwell on those.

Windows Phone 7The Windows Phone is supposed to have a pretty standard user experience regardless of whose hardware you've acquired, but in case you're interested what I'm typing in to at the moment is an HTC 7 Trophy, with 8GB of RAM. Memory is one of the key distinguishing factors between the phones on the market, although there are others. For work it was more important to get a phone promptly than get a memory monster, so we passed up the chance to wait for an LG Optimus 7 with 16GB. The HTC phone is physically prettier, quite like an iPhone.

Sitting on a bus bombing through the Fife countryside as I am, the feature I'm most conscious of is the onscreen keyboard, the only means of text input. I've heard it compares well with the iPhone, and a juddery bus is a pretty fierce test, but I do feel fat fingered even when not stretching its capabilities. What I really want right now is a stylus (which is easier to steer with the point held on the page than stabbing at keys that respond when you get near them), and what I want in a more stable environment is a Bluetooth keyboard; unfortunately neither are supported, as I discovered when I tried with my old keyboard.

It's true I'm not a typical user. I have a dumb phone myself, and wouldn't have that if I hadn't been given it. What I want is a PDA, but since most/all PDAs are phones these days, I'd better get used to it! ;-)

There's a lot to like, though. The touch is nice and responsive, and it will be interesting to see how the marketplace develops. Office is a handy thing to have a mobile version of, and at no extra cost (unlike the extra software I had to invest in for my Palms). Although I'm not really a gamer, the Xbox Live integration is a nice touch.

Standard stuff like mail was fairly easy to set up, apart from connecting to Exchange through Outlook Web Access secured by a self-signed certificate. The only way to get the root certificate onto the machine is to set up some other e-mail account on the device, mail the certificate to yourself, and install it from the e-mail message . Personally I'm a fan of paying for certificates for applications like this, but grrr! That was annoying. Once set up, each e-mail account has its own tile on the start screen, and they are accessed separately.

I wasn't quite expecting that, because other updates from the Internet are all collected into one place, under the People tile. Well, the ones that are supported, anyway - Windows Live and Facebook. If you use some other social media, like LiveJournal or Twitter you're out of luck - for now at least - and will need to use the browser or a dedicated app. I understand why it's not possible to support all the many and varied options out there, but not sure why something that's basically a social newsreader can't accept an RSS feed...

Browsing the Internet is quite cool (dumb phone owner, remember!), and the pinch zoom does make it possible to browse pages that would otherwise be a non-starter. Kudos to Apple for leading the way on that one - but having used it in anger, it's now quite clear that it's a sticking plaster. If you're developing a web site, and you want people to access it from mobile devices, do them a favour and design for mobile: don't just trust the browser to take care of it for you. It may work, but it'll be needlessly painful.

Bing maps with the built-in GPS are quite fun - not sure there's much to add to that, but there you go.

I guess the key question has to be, would I get one with my own money? Well, I've been waiting a long time for a device that I would be satisfied with as a worthwhile upgrade from my venerable Palm Vx. I've always said it has to be a convergence device, at least to the extent that it will replace not one, but two of the devices I carry around with me. The Windows Phone doesn't quite do everything my Palm can; most notably it's missing a database solution like HanDBase, though that's surely just a matter of time. It's the first time, though, that I've played with a device where I think "This might be the one". It's got decent potential as a PDA; it's a phone; it's got a camera that's comparable to the one I was using up until last year; it doesn't have the capacity to carry my music collection, but then neither does anything else except the high end iPods; finally, it's actually pleasurable to use.

Rather a powerful point in its favour is that it's part of the Microsoft ecosystem and will work with my other devices with a minimum of hassle; and I have the option of developing for it without having to buy a Mac, although I'm a bit disappointed it would cost me $99 p.a. just to be able install an app directly onto my own machine. Admittedly, that would also allow me to distribute it through the Marketplace, and earn megabucks (ahem), and do likewise for the Xbox, but still.

So the answer is maybe, but a more definite maybe than any previous device. May be interesting to see what emerges over the next few months.

ggreig: (Three)

It was interesting to come across an old article containing the Autism-Spectrum Quotient Test, which is apparently used as a measure of the extent of autistic traits in adults. There are also warnings from the authors that it’s not a diagnostic tool, so I reckon it falls into the category of “interesting toy that might have indicative results”. Speak to a real medical professional if you have any concerns.

Anyway, the average score for a control group was 16.4, with a score of 32 or more indicating “clinically significant levels of autistic traits”. Don’t read too much into it, you can score more than 32 and still live a normal life, etc.

I scored 33.

I’m quite happy with that. As I have at least the self-awareness of a bollard, I know I’m not the world’s most socially capable person, but any other symptoms would be relatively mildly displayed. I like order, and I can get into routines, in ways that can no doubt be annoying for others, but I’m not seriously obsessive about them; just more comfortable. My liking for order is selective; I can still be pretty messy and disorganised!

I’m happy to have a borderline score because that’s pretty much where I would see myself; somewhere near the edge of most people’s social scale, but fully functioning. I’m also quite happy being a software developer, a profession where people seem to reckon such traits may be more common.

I’m mildly relieved the number wasn’t higher, partly because I don’t want to think of myself as having a “condition” with its accompanying labels, but mainly because I don’t want an excuse. If I’m difficult to deal with in some way, that’s my responsibility and my fault (or maybe yours ;-).

Edit: Realized that the last paragraph could read as being dismissive of the condition of autism. That's not my intention.

ggreig: (MoonFrown)

Here are a couple of interesting and entertaining videos about motivation and positive thinking that may not be what you’re expecting, having read the first half of this sentence.

I'm motivated to view these videos, because I'm positive they'll be entertaining and informative! )

June 2017

45 678910

Most Popular Tags


RSS Atom

Style Credit

Page generated Oct. 22nd, 2017 02:32 am
Powered by Dreamwidth Studios