Page 1 of 14812345678910...2025303540...Last »

Microsoft Convergence Atlanta 2015 (#CONV15) – Day 1

Keynote and General Session

I know, it’s been over a week since Microsoft Convergence 2015 closed its doors, however, I did not want the time to go by without reliving some of the things I personally experienced throughout the event. With early mornings and late evenings it became impossible to write blog posts as things were happening, considering my own involvement with quite a few of the activities and presentations at Convergence.

Day 1 started out with David and I rushing through Atlanta’s traffic to get to the Georgia World Congress Center. From there we would head over to the Phillips Arena for the Opening Keynote Speech. We got there at the tail end of the presentation of Dance 411. The Dance 411 Foundation’s mission is to foster the well-being of urban youth and young adults through self-expression. They provide a quality education and exposure to the discipline of dance, drama and music. Judson Althoff, President Microsoft North America was in the middle of interviewing JJ Crampton and Sindy Scheider, both directors of the Foundation and requesting everyone filled out the Convergence event evals, for which Microsoft would make a donation to the Foundation.

Dance 411

Once the dance group completed their presentation, Althoff was once on stage to talk about the Atlanta Youth Project and Truly Living Well Center for Natural Urban Agriculture and the volunteering work done in conjunction with the Convergence attendees who signed up for community outreach, now a staple of these events. The community outreach video was accompanied by an original song by The Groove Merchants.

Upon the conclusion of the community outreach video, Althoff was back on stage to describe the upcoming days at Convergence and some of the guest speakers that attendees would have a chance to experience. He also alluded to the fact that the event itself, Convergence, is also evolving and changing, just like the businesses present at the event. He also noted that Convergence used to be a Dynamics only event. Microsoft has expanded the event and evolved it to actually incorporate all of its innovations. Convergence has become the Premier Business Event.

Without further due, Satya Nadella was on stage to talk about how Microsoft is empowering every person and every organization on the planet to achieve more, via the “systems on intelligence”.

Satya Nadella on Microsoft’s Vision

The systems of intelligence interact with the systems of record to make sense of the data collected. Microsoft is focusing on the automation of the systems of intelligence, with the richness of its cloud infrastructure. To further talk about how other industries are taking advantage of the technologies that drive the systems of intelligence, Satya welcomed Seattle Seahawks’ Russell Wilson.

Seattle Seahawks Russell Wilson

Russell described how he uses OneNote to track all his activities on and off the field and how the National Football League (NFL) leverages Microsoft Surface during the games to analyze team formations, plays, and players in near real time – Microsoft is a sponsor of the NFL.

The rest of the presentation focused around the use of other technologies such as Yammer within Microsoft itself. Also there was a cool case study on how AccuWeather is leveraging Microsoft Azure to deliver custom and personalized weather to both consumers and businesses.

AccuWeather

After the case studies, it was time for Mark, Belinda, and I to head over to the GWCC to wire up for the Microsoft Dynamics GP General Session, to be held at the Sydney Marcus Auditorium. Upon arrival, I went back stage to check in and had a chance to capture this picture with the engineering team at work.

Video and Audio Engineering Room

This year, the Microsoft Dynamics GP General Session featured a number of info-bites showing what each of the presenters were doing at different stages during the 90’s and various terminologies born from that time.

Little bits of information before session

This year’s Dynamics GP General Session would focus on product strategy and roadmap, and as customary, it began with with Errol Schoenfish welcoming all attendees and discussing the Microsoft Cloud for Business strategy, which features Office 365, Azure, and the business applications, including Microsoft Dynamics GP. Errol went on to demo a Time Management app (#IfErrolCanDoIt) showing how it would work on various device platforms.

Then came the highlight of the event (ehem!): The MVP Duel featuring Mark Polino and I, with a special guest, Belinda Allen. Our presentation, showcasing a number of new features in Microsoft Dynamics GP 2015, went very smooth and features were well received by the audience.

The MVP Duel – From left to right: MVPs Mark Polino, Belinda Allen, and Mariano Gomez

Up next was the customer story featuring Rural Renewable Energy Alliance (RREAL), a non-profit dedicated to make solar energy available to low income families.

Next up was Jennifer Ranz to demo a day in the life of a RREAL employee. Jenn showed the dashboards released for Office 365 and PowerBI. Jason Edens from RREAL came on stage to talk about how their company is leveraging Microsoft Dynamics GP to run their business.

The session went on with other demos and a glimpse into the future of Microsoft Dynamics GP. First up was Jeff Trosen to talk about the evolution of the Microsoft Dynamics GP roadmap. Chad Sogge came up next to talk about the new HTML 5 interface and provide a demo of how this new web client technology will allow for a better user experience across browsers and devices.

Errol Schoenfish and Chad Sogge on the Future of Microsoft Dynamics GP Web Client

I had to finally get a shot of the audience.

Microsoft Dynamics GP General Session Attendance

Well, in my next post, I will talk about the sessions we delivered throughout the rest of the event.

Until next post!

MG.-
Mariano Gomez, MVP
Intelligent Partnerships, LLC
http://www.intelligentpartnerships.com/

See more here:
Microsoft Convergence Atlanta 2015 (#CONV15) – Day 1

March 30, 2015 · Mariano Gomez · No Comments
Tags: , , , , , , , , , , ,  · Posted in: Blogs I Follow Total Views: 3

Dynamics GP Analysis Cubes Error: The column "INTERID" cannot be processed because more than one code page (1252 and 1256) are specified for…

 

I am sure if were in the non-English countries, you might need to use code pages other than CP1252 to support your characters, and 1256 would your right choice for example if you been in Arab speaking countries, but this makes a problem when it comes to Analysis Cubes installation.

Once you install the Analysis Cubes and finish all wizard issues you feel like things are becoming easy and will proceed to start your job getting your cubes inititalized and then you will be start getting below errors:

Results to CompanyMaster Task OLE DB Destination [22]    
Description: The column “INTERID” cannot be processed because more than one code page (1252 and 1256) are specified for it. 
End Error 

Error: 2015-03-23 10:18:58.26    
Code: 0xC02020F4    
Source: Copy Data from Results to CompanyMaster Task OLE DB Destination [22]    
Description: The column “CMPNYNAM” cannot be processed because more than one code page (1252 and 1256) are specified for it. 
End Error 

Warning: 2015-03-23 10:18:58.26    
Code: 0x800470C8    
Source: Copy Data from Results to CompanyMaster Task OLE DB Destination [22]    
Description: The external columns for component “OLE DB Destination” (22) are out of synchronization with the data source columns. The external column “CompanyID” needs to be updated.  The external column “CompanyName” needs to be updated. 
End Warning 

Error: 2015-03-23 10:18:58.26    
Code: 0xC004706B    
Source: Copy Data from Results to CompanyMaster Task SSIS.Pipeline    
Description: “component “OLE DB Destination” (22)” failed validation and returned validation status “VS_ISBROKEN”. 
End Error 

Progress: 2015-03-23 10:18:58.26    
Source: Copy Data from Results to CompanyMaster Task     
Validating: 50% complete 
End Progress 

Error: 2015-03-23 10:18:58.26    
Code: 0xC004700C    
Source: Copy Data from Results to CompanyMaster Task SSIS.Pipeline    
Description: One or more component failed validation. 
End Error 

Error: 2015-03-23 10:18:58.26    
Code: 0xC0024107    
Source: Copy Data from Results to CompanyMaster Task     
Description: There were errors during task validation. 
End Error 

Error: 2015-03-23 10:18:58.26    
Code: 0xC00220E4    
Source: Run Company     
Description: Error 0xC0012050 while preparing to load the package. Package failed validation from the ExecutePackage task. The package cannot run.  . 
End Error 

Warning: 2015-03-23 10:18:58.26    
Code: 0x80019002    
Source: DynamicsGP_TWO_to_DynamicsGPWarehouse_Package_Master     
Description: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED. 
The Execution method succeeded, but the number of errors raised (6) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.  End Warning  DTExec: The package execution returned DTSER_FAILURE (1). 
Started:  10:18:57 AM 
Finished: 10:18:58 AM 
Elapsed:  0.842 seconds. 
The package execution failed. 
The step failed.

Obviously it is all about the first error, different code pages are exist and therefore your data cannot be copied from the production database to the data warehouse, going further with investigations I been able to get around this error by unifying the code page in my packages, and this is by simply allowing a flag in cubes SSIS packages to use the default code page “AlwaysUseDefaultCodePage” to be “True” and your issues will no longer be shown:

image

Now the challenge here you need to extract the packages from the MSDB store, to your Visual Studio and perform this change, save your package and re-import this back to your MSDB, this will need to be done to the following packages:

DynamicsGP_DynamicsGPWarehouse_FiscalPeriods.dtsx
DynamicsGP_DynamicsGPWarehouse_GLBudgets.dtsx
DynamicsGP_DynamicsGPWarehouse_GLMDAGroups.dtsx
DynamicsGP_DynamicsGPWarehouse_GLMDATransactions.dtsx
DynamicsGP_DynamicsGPWarehouse_GLTransactions.dtsx
DynamicsGP_DynamicsGPWarehouse_ItemCurrentQuantity.dtsx
DynamicsGP_DynamicsGPWarehouse_ItemMaster.dtsx
DynamicsGP_DynamicsGPWarehouse_PendingPurchaseOrders.dtsx
DynamicsGP_DynamicsGPWarehouse_PendingSalesOrders.dtsx
DynamicsGP_DynamicsGPWarehouse_PurchaseOrderDetail.dtsx
DynamicsGP_DynamicsGPWarehouse_SalesDetail.dtsx
DynamicsGP_DynamicsGPWarehouse_SalesPerson.dtsx
DynamicsGP_DynamicsGPWarehouse_SalesTerritory.dtsx
DynamicsGP_DynamicsGPWarehouse_TotalExpense.dtsx
DynamicsGP_DynamicsGPWarehouse_TotalRevenue.dtsx
DynamicsGP_DynamicsGPWarehouse_AgingDetails.dtsx
DynamicsGP_DynamicsGPWarehouse_AgingPeriodAmounts.dtsx
DynamicsGP_DynamicsGPWarehouse_AgingPeriods.dtsx
DynamicsGP_DynamicsGPWarehouse_CheckbookRegister.dtsx
DynamicsGP_DynamicsGPWarehouse_CompanyMaster.dtsx

Luckily, I found a script that makes this easier, it allows you to extract all your SSIS packages from MSDB to file system instead of pulling these one by one, it will save the packages to a folder on your “C:” drive, and all what you need to do then is copying these to your visual studio and start changing the flag, below the script:

;
WITH FOLDERS AS
(
    — Capture root node
    SELECT
        cast(PF.foldername AS varchar(max)) AS FolderPath
    ,   PF.folderid
    ,   PF.parentfolderid
    ,   PF.foldername
    FROM
        msdb.dbo.sysssispackagefolders PF
    WHERE
        PF.parentfolderid IS NULL

    — build recursive hierarchy
    UNION ALL
    SELECT
        cast(F.FolderPath + ” + PF.foldername AS varchar(max)) AS FolderPath
    ,   PF.folderid
    ,   PF.parentfolderid
    ,   PF.foldername
    FROM
        msdb.dbo.sysssispackagefolders PF
        INNER JOIN
            FOLDERS F
            ON F.folderid = PF.parentfolderid
)
,   PACKAGES AS
(
    — pull information about stored SSIS packages
    SELECT
        P.name AS PackageName
    ,   P.id AS PackageId
    ,   P.description as PackageDescription
    ,   P.folderid
    ,   P.packageFormat
    ,   P.packageType
    ,   P.vermajor
    ,   P.verminor
    ,   P.verbuild
    ,   suser_sname(P.ownersid) AS ownername
    FROM
        msdb.dbo.sysssispackages P
)
SELECT
    — assumes default instance and localhost
    — use serverproperty(‘servername’) and serverproperty(‘instancename’)
    — if you need to really make this generic
    ‘dtutil /sourceserver localhost /SQL “‘+ F.FolderPath + ” + P.PackageName + ‘” /copy file;”C:Packages’ + P.PackageName +’.dtsx”‘ AS cmd
FROM
    FOLDERS F
    INNER JOIN
        PACKAGES P
        ON P.folderid = F.folderid
– uncomment this if you want to filter out the
– native Data Collector packages
– WHERE
–     F.FolderPath <> ‘Data Collector’

Once you run this on your SQL Server the result will be set of commands like the below, run these commands using CMD and go to find these in your C:Packages folder:

dtutil /sourceserver SERVERNAME /SQL “DynamicsGPWarehousePackage” /copy file;”C:PackagesPackage.dtsx”

Execute these over CMD and find your files on C: drive, select all and paste the files inside your Visual Studio and start your modifications, once done import back updated packages to SQL Integration Services one by one and rerun your job.

Hope that this helps.


Regards,


Mohammad R. Daoud MVP – MCT
MCP, MCBMSP, MCTS, MCBMSS
+962 – 79 – 999 65 85
me@mohdaoud.com
http://www.di.jo

Visit link:
Dynamics GP Analysis Cubes Error: The column "INTERID" cannot be processed because more than one code page (1252 and 1256) are specified for…

March 23, 2015 ·  · No Comments
Tags: , , , , , , , ,  · Posted in: Blogs I Follow Total Views: 15

Upgrade from GP 2010 to GP 2013 R2

3d man with Q & A

Question: How do you upgrade from GP 2010 build 2390 to GP 2013 R2

Answer: The documentation from Microsoft that delineates the upgrade path from GP 2010 to GP 2013 R2 is missing the current build of GP 2010 (as of 3/16/2015). The document from Microsoft can be found here: https://mbs.microsoft.com/partnersource/northamerica/support/hot-topics/HOT_TOPIC_MDGP2013Upgrade#UpgradePaths.

The line missing is how to upgrade to GP 2013 R2 from 11.00.2390. The answer is that you have to upgrade to 12.00.1826. The build numbers for both GP 2010 and GP 2013 R2 are achieved after installing the January 2015 Hotfix. Thanks go out to Paul Degneau, at Standard Process www.Standardprocess.com, for suggesting this to me.

Enjoy!

Leslie

Original post:
Upgrade from GP 2010 to GP 2013 R2

March 17, 2015 · Leslie Vail · No Comments
Tags: , , , , , , , , ,  · Posted in: Blogs I Follow Total Views: 18

Dynamics GP hosting – a great experience with RoseASP

I recently had a great experience that I would like to share. We have a client that was on a very old version of Dynamics GP (8.0), very old version of SQL (2000) a very, very old server (going on 10 years), and outsourced IT. Long story short, their server went down, they lost 2 out of the 3 […]

Read this article:
Dynamics GP hosting – a great experience with RoseASP

March 16, 2015 · Victoria Yudin · No Comments
Tags: , , , , , , , , , , ,  · Posted in: Blogs I Follow Total Views: 24

You receive "Unable to Upgrade SBA from RTM" when attempting to apply Microsoft Dynamics GP 2015 January or March Hotfix

Well, this one for sure has bitten more than one person already. I’ve seen a lot of exchanges and fielded a number of calls from folks trying to install the January or March hot fixes of Microsoft Dynamics GP 2015. When the msp file is executed, couple seconds into the execution you receive the following error message:

Unable to upgrade SBA from RTM. Please remove the SBA feature before running this patch.

The first reaction is to try and find the feature via the Uninstall or change a program options under the Windows Control Panel. As it turns out, there’s no such option. This has led many folks to the next “obvious” option: Microsoft Dynamics GP Web Components.

When you choose to uninstall the Microsoft Dynamics GP Web Components, you will get rid of the Web Client install, but not the SBA components.

So what’s the solution?

The keyword in the error message is the word “feature”. SBA is a Microsoft Dynamics GP feature. In order to remove, you will need to right-click on Microsoft Dynamics GP 2015 and select the change option.

You will then click on the Add/Remove Features option in the Program Maintenance window, then scroll down until you see the Service Based Architecture option in the Select Features window. You can the proceed to click on the corresponding options button associated to the SBA prompt and select Not Available.

Select Features window

Once you click Next, the installer will proceed to remove the feature from your environment. When completed, you can re-run the hotfix msp to apply the updated code.

Until next post!

MG.-
Mariano Gomez, MVP
Intelligent Partnerships, LLC
http://www.intelligentpartnerships.com/

More:
You receive "Unable to Upgrade SBA from RTM" when attempting to apply Microsoft Dynamics GP 2015 January or March Hotfix

March 13, 2015 · Mariano Gomez · No Comments
Tags: , , , , , , , , , ,  · Posted in: Blogs I Follow Total Views: 20

You receive "You are not allowed to use Microsoft Dynamics GP. Please sign out and sign in with an authorized account" when accessing Web…

One of the cool things about Microsoft Dynamics GP 2015 is the new Web Client Identity Management feature. Having the ability to access Microsoft Dynamics GP with your Windows Directory or Windows Azure credentials without ever needing a SQL login account is just beautiful.

The Theory – Part 1: GP Utilities

The theory is fairly simple: you have a Microsoft Dynamics GP user account, which in turn is tied to a Windows Active Directory account or Windows Azure Active Directory account. User accounts are stored in the User Master table (dbo.SY01400) in the system database, which has been beefed up with a new column called Active Directory Object GUID (ADObjectGuid) to store the actual GUID of the directory or organizational account mapped to the GP user.

User Setup window

However, because Microsoft Dynamics GP continues to be dependent on SQL authentication for all intends and purposes, it continues to need a SQL login to be able to access the Dynamics GP database objects. This is where the new Web Client SQL Login user comes into play.

If you have done a new install of Microsoft Dynamics GP 2015, you would have noticed a new window called Manage Web Client SQL Server Login during the GP Utilities process. This window prompts for SQL credentials that will be used to access the SQL server database objects from Web Client.

Manage Web Client SQL Server Login window (GP Utilities)

If you are doing an upgrade, you will need to direct your attention to the drop-down list in the Additional Tasks window to find it — more on this later.

Additional Tasks window (GP Utilities)

When you enter the credentials in the Manage Web Client SQL Server Login window, the actual SQL Server security principal is created with the same password encryption at the database level. To understand more about this, read Why does Microsoft Dynamics GP encrypt passwords by David Musgrave over at Developing for Dynamics GP.

The Theory – Part 2: Web Client

When you are installing the Web Client itself, you are once again prompted to enter the Web Client SQL Server Login credentials. At this stage you MUST enter the same account information entered when you ran the GP Utilities.

This information is stored in the TenantConfiguration.xml file (in a single-machine instance) under the SessionCentral folder. The same information is used by the Service Based Architecture service (GPService service) to gain access to database resources, hence there’s also a TenantConfiguration.xml file (again, in a single-machine instance) under the GPService folder. These two folders can be located under your Program FilesMicrosoft DynamicsGP Web Components root folder.

Now that your AD or Organizational account is tied to your GP user account, when you launch the web client and your AD credentials are validated against IIS, a security token is created and passed on to Session Central service, which in turn spins up a runtime process passing on your AD account credentials in the GP Login window. The log in process itself will use the Web Client SQL Server login to access the system database and in particular the User Master table to validate the AD account GUID against the one stored in the table. If all matches, you are allowed access and from there on you go about your business.

The Problem

This brings us to the topic of this post…

As it turns out, during that handshake between Session Central and the Runtime service to pass off the AD credentials, I received the following error:

Further review of the Dynamics application and services log in Event Viewer, shows the following error:

System.Security.Cryptography.CryptographicException: Padding is invalid and cannot be removed.
   at System.Security.Cryptography.CapiSymmetricAlgorithm.DepadBlock(Byte[] block, Int32 offset, Int32 count)
   at System.Security.Cryptography.CapiSymmetricAlgorithm.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
   at System.Security.Cryptography.CryptoStream.FlushFinalBlock()
   at System.Security.Cryptography.CryptoStream.Dispose(Boolean disposing)
   at System.IO.Stream.Close()
   at Microsoft.Dynamics.GP.Web.Foundation.AesCryptographer.Decrypt(String value)
   at Microsoft.Dynamics.GP.Web.Services.Session.TenantServiceXmlHandler.ResolveTenantPasswords(Tenant tenant)
   at Microsoft.Dynamics.GP.Web.Services.Session.TenantServiceXmlHandler.GetTenantDetails(String identity, String tenantName)
   at Microsoft.Dynamics.GP.Web.Services.Session.Service.SessionCentralService.CreateSession(String tenantName, UserContext userContext)

Typically, any Crypto exception is directly related to credentials. So I traced back my steps after the upgrade and realized I had created the Web Client SQL server login account manually — after all, I had not seen the option in the GP Utilities drop down to do so. Of course, this would mean that the password was un-encrypted on SQL server and wouldn’t match the password stored in the TenantConfiguration.xml file. In retrospect, had I even used GP Utilities to setup the account and entered a different password from the one I entered during the Web Client install, I would have received the same error.

The Solution

Knowing that in essence what I had was a password mismatch between the value stored in TenantConfiguration.xml and the password at the SQL Server level, I decided to make things simple and removed the database user (sp_dropuser) corresponding to the security principal and the actual security principal (sp_droplogin) then re-launched GP Utilities and created the account once more, this time making sure the password matched what I had entered when installing the Web Client.

Once I launched the Web Client and entered my Windows credentials information, I was able to experience the beauty of single sign-on all the way to the company database I had selected as my default company.

Also, it is worthwhile to mention that Service Based Architecture was failing validation, but I will address this in my next article.

Acknowledgements

I want to thank Chris Rudolph with the Microsoft Dynamics GP Software Engineering team for his valuable insight into working through this issue. Chris also helped me with understanding some deep architecture stuff that I will be presenting in a future related article to this one.

Until next post!

MG.-
Mariano Gomez, MVP
Intelligent Partnerships, LLC
http://www.intelligentpartnerships.com/

Read More:
You receive "You are not allowed to use Microsoft Dynamics GP. Please sign out and sign in with an authorized account" when accessing Web…

March 12, 2015 · Mariano Gomez · No Comments
Tags: , , , , , , , ,  · Posted in: Blogs I Follow Total Views: 34

Values for SY01402 – System User Defaults

I needed to research the settings in the System User Defaults table recently, so I took out my list of what the syDefaultType field translated to. The table below shows the value and its definition. These constants are from the GP2013R2 build


syDefaultType Definition
1 SCBARAUTOHIDE
2 SCBARWHICHSIDE
3 SCBARWIDTH
4 SCBARICONSIZE
5 SCBARAUTOOPEN
6 UNDERLINED_PROMPTS
7 COLORSCHEME
8 BACKGROUND
9 TOOLBARBUTTONS
10 MESSENGER
13 REMINDERS
14 MAPPOINT
15 FIELDSECURITY
16 COMMISSIONS
17 VENDORLISTSORT
18 VENDORLISTINACTIVECB
19 CUSTLISTSORT
20 CUSTLISTINACTIVECB
21 ITEMLISTSORT
22 ITEMLISTINACTIVECB
23 SOPITEMMISSINGCB
24 POPITEMMISSINGCB
25 EMPLISTSORT
26 EMPLISTINACTIVECB
30 AUTOCOMPLETE
31 PRINTONEPOPERADDRESS
40 HRVETSNAICSNUMBER
41 LISTWINDOWSIZE
42 NAVBAR_BIGBTNCOUNT
43 SOPMANAGESOPTYPE
45 CPRCONVERSION
46 SQLREPORTING_TARGETLOC
47 SQLREPORTING_RPTMGRLOC
48 SQMOPT
49 SHAREPOINTSERVERURL
50 LOCKEDTOOLBARS
51 REGKEY
52 HOMEPAGEMETRIC
53 HOMEPAGEREMINDERS
54 HOMEPAGEOUTLOOK
68 MFG_MODULE_ENABLED
69 REMINDERSCUES
70 REMEMBEREDCOMPANY
71 REMEMBERUSERENABLED
72 SHOWALLMETRICS
80 RPTTEMPLATES_ENABLED
82 RPTTEMPLATES_ALLOWSTDORTEMPLATE
83 POSITIONCONTROL
84 FACTBOX_ROTATIONFREQUENCY
85 FACTBOX_IMAGESIZE
90 ISSHAREPOINTONLINE
91 EMAIL_SERVER_TYPE
92 EMAIL_PROTECT_WITH_PASSWORD
93 EMAIL_PASSWORD_RADIO
94 EMAIL_PROTECT_PASSWORD
95 PHONEHOME
96 SLAHWINDOW
97 WEBCLIENTSQLLOGIN
1493 SMARTLIST
22001 MBS_DEXPROFILE
22002 MBS_SQL_LOG

Enjoy!
Leslie

More:
Values for SY01402 – System User Defaults

March 2, 2015 · Leslie Vail · No Comments
Tags: , , , , , , , , , ,  · Posted in: Blogs I Follow Total Views: 22