05/04/2014

Sitecore and BLOB


Sitecore stores images as image type, which it has its own advantages which is listed in following.

1-BLOB data is backed up with the database. Having a single storage system can ease administration.
2-Databases efficiently handle large numbers of small objects

In other hand it has its own disadvantages comparing saving images as File system on hosting on web server or CDN

1-By adding more images to database,  the database size gets a lot larger and retrieving an image from a database incurs significant overhead compared to using the file system
2-You can't do incremental backups with blobs in a database, you can with files on a file-system
3-It makes the database size grow so fast .Disk storage on database servers is typically more expensive than storage on disks used in Web server farms.
4-Big size database takes more administration time to  get backup or restore


based on the research has done by Microsoft (http://research.microsoft.com/pubs/64525/tr-2006-45.pdf) This study shows that when comparing the NTFS file system and SQL Server 2005 database system on a create, {read, replace}* delete workload, BLOBs smaller than 256KB are more efficiently handled by SQL Server, while NTFS is more efficient BLOBS larger than 1MB.
It’s hard to ask your sitecore content users to upload images smaller than 256KB for better efficiency.

Microsoft introduced a new way of storing blob data in sql server 2008, which combines the benefit of saving images in database and efficiency of using NTFS (http://technet.microsoft.com/en-us/library/cc949109.aspx)

Some experts are saying a valid point that Sitecore caches all the images in the media library, then having images in DB or on file system doesn't affect the web application performance. But, the growing database size is still an issue.

I suggest to change sitecore default setting  and start saving your images as file system and take advantage of it for your next sitecore build.

Sitecore allows you to do it with two simple line of settings .
<setting name="Media.UploadAsFiles" value="true">
<setting name="Media.FileFolder" value="/App_Data/MediaFiles">

References:
http://firebreaksice.com/storing-sitecore-media-in-the-database-vs-the-file-system/
http://technet.microsoft.com/en-us/library/cc949109.aspx
http://research.microsoft.com/pubs/64525/tr-2006-45.pdf

01/03/2014

Google + authentication and Facebook authentication with java script (social-authentication-seed)

I started to write a java script wrapper for connecting to social medias like facebook and google +.

You can find the source code at https://github.com/Azadehkhojandi/social-authentication-seed

Steps:
1- Clone the repository from https://github.com/Azadehkhojandi/social-authentication-seed - if you don't know how to do it check http://azadehkhojandi.blogspot.com.au/2014/02/step-by-step-clone-repository-from.html 

2- Open your node js command prompt and go to "social-authentication-seed" folder and then run node scripts\web-server.js


3- Browse http://localhost:8000/app/index.html
4- For using facebook authentication you only need to change appId
To create a new appId go to https://developers.facebook.com/ and create app


5- For using google + authentication you only need to change your clientId

To create a new clientId go to https://console.developers.google.com/project and create a new project
turn on google + from Apis


Then create your clientId from credentials tab


17/02/2014

step by step - bootstrapping Angular js

Angularjs is a framework which allows you to have a clean single page apps. It's introduced by Google.
let's bootstrap it first




2- Install http://www.sublimetext.com/ you can use any other text editor

3-  Open sublime then select "Add folder to project" from project menu and then select "angular-seed" folder

4- install node.js from http://nodejs.org/

5- Open Node.js command prompt and go to "angular-seed" folder and then run node scripts\web-server.js


6- Open a browser and navigate to http://localhost:8000/app/index.html












16/02/2014

Step by step - clone a repository from Github


1- download and install git - no need to change default settings
http://git-scm.com/
If you like to use graphical user interface for git install git extension too
https://code.google.com/p/gitextensions/

2- Open up Git Bash

3- Create public key and add it to your github account
Follow the steps from https://help.github.com/articles/generating-ssh-keys

4- Create a folder on local drive for your saving the cloned repositories
for example  C:\My Lab\Cloned projects

5- to switch to a drive type following in the git bash
cd c:

6- then you need to switch to the folder type
type cd my then press tab and as you can see in the following image. It completes the name of folder for you






7- Open a repository page from github website like https://github.com/Azadehkhojandi/CheckboxListFor
and copy the ssh clone url
















8- type git clone and right click on the git icon on the top bar of Git bash window then select edit then paste the clone url
for example :
git clone git@github.com:Azadehkhojandi/CheckboxListFor.git




06/02/2014

Should you upgrade your Sitecore from 6.5 to 7.1?

I recently had a chance to work with sitecore cms. Our client requested to upgrade their CMS so they would be able to use the newly added functionality of sitecore.
After we upgraded our sitecore I was quiet surprised that we found a few bugs in their system. The good news is their support team helped us and the bugs are fixed now.
If you decided to upgrade your sitecore my recommendation to you is to add at least a week of buffer to your estimation.




13/12/2012

How to fix common errors in sitecore





How to fix common errors in sitecore


Check Connection strings in \Website\App_Config\ConnectionStrings.config


The network path was not found
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.Exception Details: System.ComponentModel.Win32Exception: The network path was not foundSource Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 

[Win32Exception (0x80004005): The network path was not found]

[SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)]
   System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection     owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) +671
   System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection     owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +116
   System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +1012
   System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +6711619
   System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +152
   System.Data.SqlClient.SqlConnection.Open() +229
   System.Web.DataAccess.SqlConnectionHolder.Open(HttpContext context, Boolean revertImpersonate) +150
   System.Web.DataAccess.SqlConnectionHelper.GetConnection(String connectionString, Boolean revertImpersonation) +4874450
   System.Web.Security.SqlMembershipProvider.GetUser(String username, Boolean userIsOnline) +1729
   Sitecore.Security.SitecoreMembershipProvider.GetUser(String username, Boolean userIsOnline) +51
   System.Web.Security.Membership.GetUser(String username, Boolean userIsOnline) +175
   Sitecore.Security.Domains.Domain.CreateAnonymousUserIfNeeded() +56
   Sitecore.Pipelines.Loader.EnsureAnonymousUsers.Process(PipelineArgs args) +143
   (Object , Object[] ) +80
   Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args) +191
   Sitecore.Nexus.Web.HttpModule.Application_Start() +160
   Sitecore.Nexus.Web.HttpModule.Init(HttpApplication app) +619
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +530
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +304
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr     appContext, HttpContext context) +404
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +475

[HttpException (0x80004005): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +12881540
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +159
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +12722601






It’s because .net framework 4.5 is installed on the server
Change the  \Website\Web.config

<setting name=”Login.RememberLastLoggedInUserName” value=”false” />

 Server Error in '/' Application.


Object of type 'System.Int32' cannot be converted to type 'System.Web.Security.Cryptography.Purpose'.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.ArgumentException: Object of type 'System.Int32' cannot be converted to type 'System.Web.Security.Cryptography.Purpose'.

Source Error: 
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 
 
[ArgumentException: Object of type 'System.Int32' cannot be converted to type 'System.Web.Security.Cryptography.Purpose'.]
   System.RuntimeType.TryChangeType(Object value, Binder binder, CultureInfo culture, Boolean needsSpecialCast) +185
   System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig) +122
   System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +206
   System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +126
   Sitecore.SecurityModel.Cryptography.CookieProtectionHelperWrapper.Encode(CookieProtection cookieProtection, Byte[] buf, Int32 count) +175
   Sitecore.sitecore.login.LoginPage.WriteCookie(String name, String value) +94
   Sitecore.sitecore.login.LoginPage.Login_LoggingIn(Object sender, LoginCancelEventArgs e) +133
   System.Web.UI.WebControls.Login.AttemptLogin() +108
   System.Web.UI.WebControls.Login.OnBubbleEvent(Object source, EventArgs e) +93
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +84
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3804



Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.17929



20/09/2012

How I solved 'permission to view' issue after publishing my website with git to windows Azure website


I  published my website (MVC 3.0) with git to Azure for the first time. when I browsed my website I got the following message:

You do not have permission to view this directory or page.

After spending an hour. I tried to publish it with .net by using publish profile. After following the  publish steps.I noticed that in the preview tab. It returns an error when you click on preview. I had broken js file in my solution.after removing that. everything works fine.

My solution for you if you got the same error
1- Build your solution in release mode.
2- Try to publish it with using publish option of project then check if you can preview all the files.



Resources:
https://www.windowsazure.com/en-us/develop/net/common-tasks/publishing-with-git
https://www.windowsazure.com/en-us/develop/net/tutorials/web-site-with-sql-database