Saturday, June 16, 2012

Building Windows 8 Metro Style Application

The windows application development is keep evolving.  The day from FoxPro, Visual FoxPro, Visual Basic, .Net WinForms, WPF.

Now it is big move for Windows 8.  The decade old typical windows app style is replaced with metro style.  The OS API are evolved, the world is more connected, the UI interfaces evolved, the devices are evolved.  Windows OS is embracing major change in Windows 8.

The transition is trend change and requires completely different approach.  Getting started with Windows 8 needs solid understanding.  Here is the complete training available from Channel 9.

  1. Introduction to the Windows 8 platform and the Windows store
  2. Designing apps with Metro style principles and the Windows personality
  3. Building Metro style apps with XAML: What .NET developers need to know
  4. What HTML developers need to know about coding Windows 8 Metro style apps
  5. Win as One: How Contracts in Windows 8 Help You Build a Killer Metro App
  6. Bring Your Windows 8 Metro Style Apps to Life with Tiles and Notifications
  7. Building Windows 8 Metro style casual games using HTML 5
  8.  

     

Wednesday, May 9, 2012

Run-time assembly creation

There are times where you may need to generate Assembly dynamically at run-time.  The blog post shares some code for the same.

public CompilerResults Compile()
{
//Set the compiler options
var compilerOptions = new Dictionary<string, string>();
compilerOptions.Add("CompilerVersion", "v4.0");

CodeDomProvider compiler = new CSharpCodeProvider(compilerOptions);
CompilerParameters parameters = new CompilerParameters();
parameters.WarningLevel = 4;
parameters.TreatWarningsAsErrors = false;
parameters.GenerateExecutable = false;
parameters.GenerateInMemory = false;
parameters.OutputAssembly = GetFileName();
parameters.IncludeDebugInformation = false;
if (RoleEnvironment.IsAvailable)
parameters.TempFiles = new TempFileCollection(RoleEnvironment.GetLocalResource("CompilerTempFiles").RootPath, false);

string baseDir = Path.GetDirectoryName(
Assembly.GetExecutingAssembly().Location);
baseDir = baseDir.Substring(0,
baseDir.LastIndexOf(Path.DirectorySeparatorChar));
baseDir = baseDir.Substring(0,
baseDir.LastIndexOf(Path.DirectorySeparatorChar));

//Add required assembly references of your code
string assemblyName;
foreach (string assembly in GetReferences())
{
string suffix = assembly.EndsWith(".exe") ? "" : ".dll";

assemblyName = assembly;
if (!assembly.StartsWith("System"))
{
if (assembly.IndexOf(".dll") > -1)
{
assemblyName = FindAssembly(baseDir, assembly);
suffix = "";
}
parameters.ReferencedAssemblies.Add(assemblyName + suffix);
}
else
{
var assemblyPath = (from assm
in AppDomain.CurrentDomain.GetAssemblies()
where assm.FullName.IndexOf(assemblyName + ",") > -1
select assm).FirstOrDefault();

if (assemblyPath == null)
{
throw new Exception("Unable to locate assembly: "
+ assemblyName + suffix);
}

parameters.ReferencedAssemblies.Add(assemblyPath.Location);
}
}

//Get your dynamic code
string Code = GetCodeText();

CompilerResults results = compiler.CompileAssemblyFromSource(
parameters, Code);

return results;
}





With dynamic code you must have some known interface, so that you can create the dynamic object of given interface to invoke the code.

public IKnownInterface GetTableServiceContext()
{
string assemblyPath = GetFileName();
if (!File.Exists(assemblyPath))
{
throw new FileNotFoundException(assemblyPath + " not found");
}

System.Reflection.Assembly assem = AppDomain.CurrentDomain.Load(
File.ReadAllBytes(assemblyPath));

Type queryType = assem.GetType("DynamicClassName");

return Activator.CreateInstance(queryType) as IKnownInterface;
}





We should be avoiding dynamic code generation and look for solutions like dependency injection, MEF frameworks.

Wednesday, April 18, 2012

SSIS–DFT does not loads last row from flat file

Yesterday, I had an interesting issue.  It has been reported me that an ETL always misses the last row from the flat file.  No matter what is the row is it happens for every file that the last row is missing.

last row

It is wired issue, I started check the ETL and created a new ETL with DFT pointing the same share file.  I could able to get all the rows.  It was happening only in that particular ETL.

I copied the DFT from the error ETL to my new ETL.  The problem disappeared.  I was wondering about the magic happening here.  The DFT is same, data file is same but the last row is getting missed.

I started comparing the ETL config and connections.  oh…at last I could able to figure out the issue.  It was due the Text Qualifier setting which update on the Flat File Connection component.  Make sure it set to None, if you don’t have any special handling.

Related MSDN discussion

Monday, April 16, 2012

Web API

Web API is the emerging trend in the Web programming.

The WiKi defines as “A web API (Application Programming Interface) is typically a defined set of HTTP request messages along with a definition of the structure of response messages, typically expressed in JSON or XML. While "web API" is sometimes considered a synonym for web service, the Web 2.0 applications typically have moved away from SOAP-based web services towards more direct REST-style communications.[1] Web APIs allow the combination of multiple services into new applications known as mashups

Check out the PDC 10 talk on Building Web API which gives insight on how Microsoft approaches Web API.

Getting Started with ASP.NET Web API

Check out the blog to get started Tutorial

Friday, April 13, 2012

SQL Table Size

Many times you may want to check the size of set of tables in SQL server.  There are multiple ways to achieve the same.

DECLARE @Unit CHAR(2)
DECLARE @SlicerSize FLOAT

SET @Unit = 'GB' --MB

CREATE TABLE #DataSize
(
RowId INT IDENTITY,
TableName SYSNAME,
DataRowCount BIGINT,
Reserved VARCHAR(20),
Data VARCHAR(20),
IndexSize VARCHAR(20),
Unused VARCHAR(20)
)

SELECT @SlicerSize = CASE WHEN @Unit = 'GB'
THEN 1024.0 / 1024.0
ELSE 1024.0
END

-- Add the table you want to check the size
INSERT #DataSize EXEC sp_executesql N'EXEC sp_spaceused [dbo.Emp]'
INSERT #DataSize EXEC sp_executesql N'EXEC sp_spaceused [dbo.Address]'

SELECT TableName,
DataRowCount / 1000 AS RowCountInKs ,
CONVERT(DECIMAL(10,2),CONVERT(INT,REPLACE(Reserved,' KB','')) / @SlicerSize) AS ReservedSpace ,
CONVERT(DECIMAL(10,2),CONVERT(INT,REPLACE(Data,' KB','')) / @SlicerSize) AS DataSize ,
CONVERT(DECIMAL(10,2),CONVERT(INT,REPLACE(IndexSize,' KB','')) / @SlicerSize) AS IndexSize,
@Unit AS Unit
FROM #DataSize

DROP TABLE #DataSize

Thursday, April 12, 2012

Encryption

Encryption is used to product the data.  There are 2 types of encryption.

  1. Symmetric: The key used to encrypt and decrypt are same.
  2. Asymmetric

Symmetric Encryption

There 4 different algorithms we can use to encrypt data in C#

  1. DES
  2. TripleDES
  3. RC2
  4. Rijndeal

Asymmetric Encryption

  • In Asymmetric encryption data is get signed using public key and decrypted using private key.  for complete list and detail check MSDN Article

Tuesday, April 10, 2012

Securing you Azure Connection String

With windows Azure you have dependency on the Keys, like storage key, sql authentication.  It is important to encrypt them and secure it.  There is good article which details the steps to secure your connection strings.

Configuring specific section of web.config

  1. Creating Certificate
  2. Uploading Certificate to Azure portal
  3. Encrypting & updating web.config
  4. Config Provider

for Encrypting and Decrypting string using certificate refer http://msdn.microsoft.com/en-us/library/windowsazure/hh697511.aspx

Engineering Excellence

Engineering Excellence Having solid engineering process and tools in place help to improve the agility of the system. Here is the high-level...