screencast

Smalltalk Daily 6/22/07: Keyboard Bindings in Widgets

June 22, 2007 8:17:16.329

On today's Smalltalk Daily, we take a look at customizing the keyboard handling for a particular widget in an application - using BottomFeeder and the DataSet as an example.

Technorati Tags: , ,

 Share Tweet This

podcast

Industry Misinterpretations Episode 41: Getting Answers

June 22, 2007 8:28:45.416

This week's episode is an interview with Liz Cohen of Answers.com. I spoke to Liz on June 13th, and we talked about what makes Answers.com different from other search engines - which you can see via this Smalltalk search - scroll down to the "related blogs". It was a fun talk, and I added a new information site to my list.

Technorati Tags: search engines, information

Enclosures:
[http://www.cincomsmalltalk.com/audio/2007/industry_misinterpretations-06-22-07.mp3 ( Size: 6777023 )]

 Share Tweet This

travel

Heading to Boston

June 22, 2007 9:19:35.403

I'm traveling up to Boston this weekend - my wife's brother lives up there, and we're off for a quick visit. It's a short trip - my daughter has more summer activities lined up than I know what to do with, and that all starts Monday.

 Share Tweet This

travel

Fun in Boston

June 22, 2007 23:41:09.509

We arrived in Boston this afternoon, and after my brother in law served us lunch - homemade pizza and soup - we headed over to the Museum of Fine Arts. We got there late, so only part of it was open. We were able to see the Asian collection, the American (pre-Columbian) collection, the Italian Renaissance collection, and the middle eastern collection. In theory, I wasn't supposed to take any pictures. However, a camera phone is pretty handy :)

That's a Korean Reliquary set, used in (I think) Buddhist ceremonies. Next, I snapped this shot of a Glazed Italian Renaissance piece:

Finally, a Buddha from the Asian collection:

There's a lot we didn't see - it's probably a whole day's visit (at least). If you hit Boston, put the MFA on your itinerary.

 Share Tweet This

history

Links to the Past

June 23, 2007 0:25:39.309

This is pretty neat. Back in October of 2006, I posted about some photos of the Crimean War that had surfaced. So imagine my surprise to see that the entire collection has been posted online - and the original photographer, back in 1855, was a James Robertson. There's an explicit notice on the site about permission being needed before you use the photos, so just follow the link to the King's Own Royal Regiment Museum.

Thanks to Peter Donnelly, the curator at the museum, for letting me know about this!

 Share Tweet This

logs

Weekly Log Analysis: 6/23/07

June 23, 2007 10:10:14.097

Time for my weekly look at the logs - BottomFeeder downloads went at a rate of 175/day last week. The details:

PlatformBottomFeeder Downloads
Windows426
Update167
Linux x86121
Solaris94
Mac X85
HPUX57
AIX56
CE ARM55
Mac 8/950
Linux Sparc29
SGI20
Linux PPC20
Windows98/ME14
Sources14
CE x869
ADUX5

Off to the HTML accesses:

ToolPercentage of Accesses
Mozilla54.5%
Internet Explorer36.1%
MSN Bot4.8%
Other2.8%
Opera1.8%

Looks like Mozilla still dominates my HTML accesses - which is not the case for the syndication numbers:

ToolPercentage of Accesses
Internet Explorer32.2%
Mozilla21.6%
BottomFeeder11.1%
Net News Wire4.4%
Other4.3%
Google Feed Fetcher3.6%
BlogLines3.2%
Vienna2.9%
Safari RSS2.8%
FeedOnFeeds2.7%
JetBrains1.8%
NewsGator1.7%
XML-FeedPP1.3%
Akregator1.1%
mioNews1.1%
Liferea1.1%
Python1.1%
News Fire1%
Jakarta1%

 Share Tweet This

marketing

The Meaning of Nothing?

June 23, 2007 10:36:38.872

I love the way Mike Arrington rationalizes being paid for quotes in advertising:

We do these all the time…generally FM suggests some language and we approve or tweak it to make it less lame. The ads go up, we get paid. This has been going on for months and months - at least since the summer of 2006. It’s nothing new. It’s text in an ad box. I think people are pretty aware of what that means…which is nothing.

Hmm. If it meant nothing, money wouldn't have changed hands. Why do companies like Cincom try to get customer quotes in success stories? Because it sounds less like market-droid drivel if an actual user of the software says it, that's why. Arrington knows this, no matter how hard he tries to rationalize it.

On this, I agree with Dave Winer's post.

Technorati Tags:

 Share Tweet This

travel

Off to the Freedom Trail

June 23, 2007 11:37:48.010

I haven't been to the Freedom Trail in over 20 years; it ought to be fun to revisit it. Back later with photos.

 Share Tweet This

travel

A day on the Freedom Trail

June 24, 2007 0:49:10.457

We had a pleasant day out on the Freedom Trail - it was great weather, and I got a few shots taken with my camera phone. My daughter has a much better selection of photos, but I won't have time to get them online until I get home. In the meantime, here's my brief gallery.

Technorati Tags: ,

 Share Tweet This

enterprisey

The stupid burns

June 24, 2007 13:57:46.701

James McGovern:

What if employees from Sun Microsystems such as Pat Patterson, Don Bowen and others were to get Sun to create a stupid little company that then immediately took all the IP and attempted to sell it as their own or at least use it within their own product where Sun immediately launched a lawsuit against them and didn't compromise forcing a judge to make a decision / ruling. This would do more for open source that a bunch of boneheaded bloggers babbling about harmony

Sometimes, the stupid coming from McGovern's blog just burns...

Technorati Tags:

 Share Tweet This

travel

Back from Boston

June 24, 2007 15:53:52.848

Short trips are always tiring - the mad dashes to the airport are just too close together. This morning, the hotel we stayed in forgot our wakeup call, so we had a little extra jolt of adrenalin to power our way through the sirport. Then the baggage handlers at BWI all took a simultaneous coffee break or something; I have no idea how else to explain the near hour we had to wait for the bags. It was a good trip though - you can check out the photos I took of the Freedom Trail here.

 Share Tweet This

development

Explanation, Stat!

June 25, 2007 8:33:47.020

I wish the author of this site explained what he meant by this:

At its best, code reuse is accomplished by sharing common classes or collections of functions and procedures (this is possible in C++, but not in Smalltalk or Java).

What does that mean?

Technorati Tags:

 Share Tweet This

itNews

Disk Space Galore

June 25, 2007 10:17:07.213

1 Terabyte drives are popping up all over - here's Seagate's announcement:

The drives come with either SATA (for consumers and enterprises) or SAS (for enterprises) interfaces and have an MFRP of US$399, which is the same as competitor Hitachi GST's 1TB drive.

Ponder that for a moment. I clearly recall buying a second 40MB drive back in the late 80's, when my first 40 MB drive was filling up. I also clearly recall thiking "I'll never need more disk". I'd say that again, but I know better. I'm editing audio these days, which chews disk. My daughter edits video, which chews mountains of disk. I can only imagine how much disk space we'll be chewing 3 years from now - but it'll be a lot.

 Share Tweet This

cst

Charting with Cairo

June 25, 2007 10:39:13.066

Arden Thomas has put together a chart example using Cairo and Cincom Smalltalk - worth checking out.

Technorati Tags:

 Share Tweet This

development

Sharing Common Code

June 25, 2007 12:58:08.948

I asked this morning what the heck was up with this post; now I see that the commentary is actually an old article (2001) from Dr. Dobbs:

Code reuse, the most common kind of reuse, refers to the reuse of source code within sections of an application and potentially across multiple applications. At its best, code reuse is accomplished by sharing common classes or collections of functions and procedures (this is possible in C++, but not in Smalltalk or Java). At its worst, code reuse is accomplished by copying and then modifying existing code. A sad reality of our industry is that code copying is often the only form of reuse practiced by developers.

A Smalltalk class can be thought of (never mind namespaces for the moment) as a global object. Therefore, any class method is - wait for it - a globally accessible "function".

We could also define a block and stuff that in a globally accessible variable, which would give Dr. Dobbs the same thing. Worse, this is Scott Ambler - who I would have assumed would know better.

Technorati Tags:

 Share Tweet This

news

Techmeme suckage

June 25, 2007 13:31:04.489

Scoble points out why Techmeme has been teh suck of late:

TechMeme (which started out as a blog news engine) has totally switched its focus away from blogs. I’m tracking the Plaxo news. I was among the first two sites out with news about Plaxo’s new 3.0 platform. I have the only videos. Posted two of them. I have one of the first real reviews. Google’s blog search shows I have the most inbound links. Om Malik, who posted a story about Plaxo two hours after I did, even linked to me.

I've been following a lot fewer links back to the site from my aggregator - it's just gotten dull. As Scoble points out, there are plenty of other sites if you want straight news site aggregation - Techmeme used to be different - and different attracted my attention.

Technorati Tags:

 Share Tweet This

sales

Customer Service, Misunderstood

June 25, 2007 16:01:01.467

James_Lileks asked for feedback on grocery store etiquette, and I thought this comment deserved some attention:

And the worst part is the attitude of the stockers. A couple of weeks ago I (very politely) said, "Excuse me," to a guy who was stocking paper towels, because he was in front of the brand I wanted. He sighed, rolled his eyes, and GLARED at me, as though he couldn't believe I would interrupt him in such a fashion. Someone needs to tell these folks that, as crummy as a job stocking grocery shelves may be, they have that job because the store has customers. And those customers don't really want to be there in the first place, and just want to get to the freakin' paper towels, already.

An awful lot of places seem to have retail staff like that - exasperation that a paying customer would ask a question is rampant. The thing is, it infects support lines, too. It's can be amusing to have an "aren't they dumb" conversation over beers, but at the end of the day, nasty interactions with staff tend to create blowback. It's far easier to create negative word of mouth than it is to create positive word of mouth, and people love to tell stories.

Technorati Tags: ,

 Share Tweet This

screencast

Using Custom Colors in a CST UI

June 25, 2007 16:46:39.498

On today's Smalltalk Daily, we make use of the custom color technique Arden explored this morning to set the background color of a button. The general technique is useful for any UI component.

Technorati Tags: , ,

 Share Tweet This

BottomFeeder

More BottomFeeder UI Work

June 25, 2007 23:39:50.750

I've never been completely happy with the way tabs work in BottomFeeder - I'm in the process of cleaning up that area of code, and making tabs function more like they do in Firefox and IE. I should be ready to throw a new build out soon. Here's what the latest development system looks like, with a search feed in the list - click through for a larger view.

BottomFeeder

Technorati Tags: ,

 Share Tweet This

cst

June CST Digest

June 26, 2007 8:46:05.498

The June 2007 Cincom Smalltalk Digest is now online.

Technorati Tags:

 Share Tweet This

general

If it's not one thing...

June 26, 2007 13:33:15.756

There are advantages to having older, fully paid off cars - the lack of a car payment being the primary one. On the other hand, the last two days have demonstrated the problems. My (now nearly 20 year old) Mirage failed its emissions check, so I had to haul it to the mechanic last week. Got the car back yesterday - still not quite good enough, so I have to invest another few bucks to get over the Maryland waiver hurdle. I drive maybe 4000 miles a year, so it makes little sense for me to buy a brand new car until this one falls apart.

Which took me to this morning.... As my wife was heading to work (in the nearly 10 year old Windstar), the window stopped working - it was out of its track. This is a bad thing when thunderstorms are in the forecast, so I drove her to work, and went back to the mechanic. One dismantled door and a spot weld later, and it all worked.

I'm hoping that's enough car investment this month...

Technorati Tags:

 Share Tweet This

screencast

Smalltalk Daily 6/26/07: More Cairo Graphics

June 26, 2007 14:31:16.125

On today's Smalltalk Daily, we take a look at some interesting charting code that uses Cairo Graphics.

Technorati Tags: , ,

 Share Tweet This

music

Let them Eat Lawsuits

June 26, 2007 14:44:38.018

This is good news - the RIAA is getting sued for malicious prosecution by Tanya Anderson, who got an RIAA suit tossed recently with prejudice. From Ars Technica:

Former RIAA target Tanya Andersen has sued several major record labels, the parent company of RIAA investigative arm MediaSentry, and the RIAA's Settlement Support Center for malicious prosecution, a development first reported by P2P litigation attorney Ray Beckerman of Vandenberg & Feliu. Earlier this month, Andersen and the RIAA agreed to dismiss the case against her with prejudice, making her the prevailing party and eligible for attorneys fees.

This is the only thing that will give the RIAA the proper motivations - kicking their customers and creating negative PR seems to have no impact on their behavior. Maybe a nice, big loss (with a precedent set for more of the same) will do the trick.

Technorati Tags: ,

 Share Tweet This

PR

iPhone Mania

June 27, 2007 0:46:42.895

How much buzz is there for the iPhone? Enough that Engadget has set up iPhone specific news feeds. And for the "oh my gosh, not more iPhone news" crowd - a sans iPhone news feed. Let the feeding frenzy begin :)

Technorati Tags: , ,

 Share Tweet This

cst

Documentation Questions

June 27, 2007 8:44:35.131

On some of our mailing lists, there's been a thread covering documentation recently. The general feeling is that we don't have sufficient documentation for the system, and I'll highlight a comment from the thread that illustrates that feeling, and a disconnect that I think we have. Mind you, I am not trying to "make an example" of anyone who commented in that thread! I'm attempting to use an example to iterate toward a solution:

To give few examples of topics, which all could benefit from answers to questions like: how it hangs together, what was the purpose of introduction (some people my consider that obvious and some may wish to debate), design assumptions about usage, etc.
Multi-process UI - so there is no need to keep directing people at #uiEventFor: and family.

Now as it happens, the multi-process UI (which was introduced in VW 7.1) is fairly well documented - here's a passage from the GUI Developers Guide (one of the PDFs we ship in the "doc" directory):

Prior to 7.1, each window stored a queue of events sent to it, and processing of events was directed by a single instance of ControlManager, named ScheduledControllers. Accordingly, there was only a single UI process, the one run by ScheduledControllers. To allow for multiple UI processes, this mechanism was changed in 7.1.

Each window now has a WindowManager that holds an event queue, representing a single UI process. Each WindowManager can manage the events for one or more windows. Usually, only closely related windows, such as windows in master/slave relation, or windows and dialogs they raise, share a manager. Note that a dialog blocks only the those windows sharing its window manager.

This starts on page 63, and it goes on to talk about using #uiEventFor (etc). So in this case, the issue isn't that it's not documented - it's that a PDF document, separate from the tools that developers live in (browsers, inspectors, debuggers) is hard to use.

The problem is that our PDFs are adaptations of the old printed manuals. Now, printed manuals are good things (albeit expensive), and the PDFs are decent analogs for the printed manuals. However, they aren't a good companion to the Smalltalk system in the "tools I use every day" sense of things. This isn't to say that they ought to be eliminated; rather, augmentation and integration would be highly useful.

Along those lines, I've been thinking about what we could do. Within the system, our Packages and classes are heavily commented, and most of the "API" methods (while not necessarily marked as APIs) are commented as well. What if that were extractable into an easily searchable reference format? What if that reference format were linked to relevant passages in our PDF documentation? In other words, what if you could actually get at the documentation directly from the tools you already use?

I'd love to have feedback on this - either comment directly, or send email to jrobertson@cincom.com

Technorati Tags:

 Share Tweet This

screencast

Smalltalk Daily 6/27/07: User Interface APIs

June 27, 2007 10:39:17.791

On today's Smalltalk Daily, we take a look at the VisualWorks APIs for commonly needed UI actions: enablement/disablement of widgets, UI customization at startup, that kind of thing. In particular, we look at classes ApplicationModel and WidgetWrapper.

Technorati Tags: ,

 Share Tweet This

weather

Too hot to think

June 27, 2007 18:16:20.649

Here in Maryland, it's too hot to think - so of course, I went out and did yard work. Then I drove my daughter around to various activities in my car with non-functioning air conditioning. If the thunderstorms hold off, I can head to the pool...

 Share Tweet This

PR

You Can't Hide

June 27, 2007 18:31:55.048

Via Scoble comes the most nightmarish delayed flight I've ever heard of - this is the sort of tale that used to just be told "over beers" between friends - now it's the sort of thing that could go completely viral. Airlines have a fairly consistent history of not being completely straight with customers - that's simply not going to work anymore. Not when so many people have phones and cameras that can shoot video and record audio.

Technorati Tags:

 Share Tweet This

marketing

Divergence

June 27, 2007 20:13:01.850

Laura Ries adds some reality to the iPhone hype:

Don't be fooled: Despite the hype, the deals and the massive advertising smart phones still only have around 10 percent of the market.

This made me think of Scoble's post on the "ugly phone" he saw. Laura's point is that people would rather have a device that does one thing well than a device that does multiple things adequately. That's not universally true; camera phones are wildly popular, and the cameras in those phones are certainly sub-optimal. On the other hand, using one I can take a photo and mail it to myself (or anyone else) immediately - which is a great benefit.

I think the upshot is this: converged devices are useful, but they are a niche product. Single purpose, "best of breed" products still tend to win.

Technorati Tags:

 Share Tweet This

BottomFeeder

New BottomFeeder Dev Build

June 28, 2007 0:33:17.159

I've posted another development build of BottomFeeder - a lot of issues with the toolbars, tabs, and menus have been worked out. There are still a couple of things I'd like to address with tabs, but 4.4 is nearly ready to go.

Technorati Tags: , , ,

 Share Tweet This

screencast

Smalltalk Daily 6/28/07: Hangman in Seaside

June 28, 2007 9:47:18.527

On today's Smalltalk Daily, we go back to Seaside, and look at a Hangman game implementation.

Technorati Tags: , ,

 Share Tweet This

itNews

Mainframe 2.0

June 28, 2007 10:19:46.274

Nicholas Carr notes that the build out of online business is making the hunt for physical assets and less expensive power more and more important:

But large software companies are finding that, as more computing tasks move online, they have to compete not just on the elegance of their programs, but on their ingenuity and efficiency in buying and deploying physical assets - land, buildings, computers, and other gear - as well as managing the huge amounts of energy required to keep all the machines running. The management of atoms is becoming as important as the management of bits

In "web 1.0", it was outfits like Sun, selling servers, that made most of the money. With "web 2.0", it's the hosting providers and physical plant people. This trend can only accelerate, IMHO.

Technorati Tags:

 Share Tweet This

PR

Old PR, or New PR?

June 28, 2007 12:16:28.627

Robert Scoble illustrates the disconnect between "old" PR, "new" PR, and what Apple does:

Last night one of the people who’ve been on the ScobleShow (my video show) wrote me and told me he was fired for appearing on my show without PR permission. I won’t tell you who that was since he’s interviewing for a new position now, but it made me realize that when I aim my camera at someone that there are real consequences for doing so. Now, the guy in question should have known that would have pissed someone off. Most big companies, in their employment agreements, have in there that you aren’t allowed to talk with the press unless given permission by the PR departments.

That would be "old" PR, where transparency is discouraged, and all news is left to the PR department for dissemination. Scble tried very hard to break that mold at Microsoft when he was there, and he's doing the same thing at PodTech. However, the "old school" approach does seem to work quite well - for Apple:

Steve Jobs is MANUFACTURING great PR by keeping everyone’s mouth shut. Heck, I’ve met some people I KNEW had an iPhone and they were so scared of retribution or consequences that they wouldn’t answer a single question.

Everyone has heard the hype surrounding the iPhone - and most of that hype has come from guarded statements from the top of Apple, followed by rampant speculation elsewhere. Contrast that with how MS handled information about Vista (or, how we handled information about Pollock), and you see the danger of promising (or even seeming to promise) too much too early.

The question is, which approach will work out over time? The current theory is that the "new" PR of transparency is the way to go, but the Apple counter-example is pretty compelling.

Technorati Tags: ,

 Share Tweet This

humor

The Grass is always browner

June 28, 2007 16:32:24.861

James Lileks notes that people just love to tell stories about how bad they have it:

It's a reaction to the latest study, which puts our traffic in the Tokyo-New Dehli category, I guess. There are spots of the Twin Cities that have bad traffic, agreed. But right now I’m looking at this page of MnDot traffic cams , and it looks like a scene from some strange version of the apocalypse in which the cars experienced the Rapture and the people stayed behind. When these roads are choked all day, then we’ll have horrible conditions. For now we still have it pretty good. Really. If it makes you feel any better, people in Fargo are complaining about traffic these days. It’s worse than ever. Takes a fellow ten minutes to get to the other side of town. Ten! Right now someone in Antartcica is stuck behind another vehicle, thinking: this gets worse every year.

I have to admit though, having done the Maryland to Virginia commute for half a year a decade ago (and it hasn't gotten better since then), I'm very happy that I work out of home office, and that the commutes I do periodically have involve air travel.

 Share Tweet This

smalltalk

Bookmark that Seaside Page

June 28, 2007 21:28:14.386

Ken Treis explains that you can create "normal" bookmarkable urls in Seaside apps where they make sense:

Thankfully, there are hooks in Seaside that make meaningful links possible. But they’re not very well known, and I can’t find any reference to them anywhere online. The methods are on WAAnchorTag, named #extraPath: and #extraParameters:. These two methods allow you to mangle the URL on the front side, just like you can with #updateUrl: on the other end.

Go read the whole post for context and details.

Technorati Tags:

 Share Tweet This

BottomFeeder

Closer to BottomFeeder 4.4

June 28, 2007 23:05:45.801

I spent some more time this evening getting tab state straightened out - the tab functionality is finally starting to work the way it should in the latest update. There's a bit more to do - I need to address Newspaper view and tabs. Beyond that, things look stable, and I should be able to get the new release out soon. Hat tip to Rich Demers for his very, very helpful UI testing!

Technorati Tags:

 Share Tweet This

sports

Dawning Realization in the Bronx

June 29, 2007 8:09:57.782

Have the Yankees figured out that "one more trade" for an aging star isn't the answer? Have they finally figured out that some young talent might be a better answer in the long run?

The Yankees are leery of dipping into the depth they have built in their farm system to make a trade for short-term help. That explains their reluctance to jump at Los Angeles Angels first baseman Shea Hillenbrand, who was told he would be designated for assignment on Friday.

The Yankees would take Hillenbrand, but only if the Angels paid almost all of his salary and accepted very little – probably a low-level prospect – in return. Hillenbrand is making $6 million this season and is batting .254, with an on-base percentage of only .275.

The last thing they need right now is a "short term answer". They need younger pitchers, and that's not something that will happen overnight. This season is a washout - the same thing is happening for the Yankees now that happened to Atlanta last year. If they don't panic, the farm system will help them out.

Technorati Tags: ,

 Share Tweet This

BottomFeeder

BottomFeeder UI Changes

June 29, 2007 13:33:02.433

I've been making a number of UI changes to BottomFeeder lately, and Rich just suggested one that simplifies things quite a bit. Newspaper view has been a feed level property, and Rich suggested that I add it to the "View" menu as an option for viewing items. That made sense to me, so now it's there. Have a look below - click through for the bigger image:

BottomFeeder Newspaper View

Technorati Tags: , , ,

 Share Tweet This

PR

iHype

June 29, 2007 13:41:22.297

This is representative of the absolute mania surrounding the iPhone:

We counted at least 30 of these boxes getting unloaded a few minutes ago off of a UPS truck. The management at the store in Palo Alto tried fruitlessly to block our view.

Now, if someone told me that my local Target was about to get a shipment of a few hundred Wiis, I might drive down and spend an hour or two to see if I could get one. But a phone? Mostly, I sit on conference calls with my cell phone, so no matter how sexy it is, I'll still be spending most of my time saying "huh? I lost track of the conversation, so could you repeat that?"

Technorati Tags: ,

 Share Tweet This

screencast

Smalltalk Daily 6/29/07: Cleaning up Hangman

June 29, 2007 15:57:07.585

Following up from yesterday's screencast, today's Smalltalk Daily cleans up the Hangman example, structuring it as a better example. Possibly overkill for something this simple, but it does make for a cleaner "how to".

Technorati Tags: , ,

 Share Tweet This

events

SqueakFest 2007

June 29, 2007 23:27:38.234

Squeakers are organizing a conference in Chicago:

We’re putting together a great three day program including hands-on workshops, panels, presentations, casual sharing time and fun social events. Alan Kay will give a talk about the One Laptop Per Child Initiative, the “xo” machine and Squeak Etoys on this platform.

Technorati Tags:

 Share Tweet This

gadgets

The iPhone Ecosystem

June 29, 2007 23:34:12.537

Phil Windley explains that the iPhone created an eco-system before it even shipped:

A guy near me in line, Kevin from Park City TV, went to Dicks Sporting Goods and bought a shade tent. I went over and bought a golf umbrella. Lots of people have bought chairs, umbrellas, and so on. Whether of not Apple makes money, Dick's is cleaning up!
California Pizza Kitchen has been making deliveries to the line. I got a Diet Coke and it about saved my life.

I don't know how the iPhone will do over the long haul, but Apple sure knows how to get people excited.

Technorati Tags:

 Share Tweet This
-->