It's been a while since a wrote something on a blog.
Today I would like to share with you a good starting point for ASP.NET 5 and switching to beta 8.
Here is a nice article Upgrading from ASP.NET 5 Beta 7 to Beta 8
And nice tutorial made by the same author Building a Web App with ASP.NET 5, MVC 6, EF7 and AngularJS
Applications and more...
You are a software engineer... you can do anything... it is just a matter of time ;)
12/2/15
3/6/14
9/11/13
Thread safe rotate index.
Sometimes you may need a rotation thread safe index.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.Concurrent;
using System.Threading;
namespace ConsoleApplication12
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Init value = Int32.MaxValue - 10");
RotatorIndex.Init = Int32.MaxValue - 10;
Thread thread1 = new Thread(new ThreadStart(ThreadMethod));
Thread thread2 = new Thread(new ThreadStart(ThreadMethod));
thread1.Start();
thread2.Start();
thread1.Join();
thread2.Join();
Console.WriteLine("Init value = - 10");
RotatorIndex.Init = - 10;
thread1 = new Thread(new ThreadStart(ThreadMethod));
thread2 = new Thread(new ThreadStart(ThreadMethod));
thread1.Start();
thread2.Start();
thread1.Join();
thread2.Join();
Console.WriteLine("Init value = Int32.MinValue + 10");
RotatorIndex.Init = Int32.MinValue + 10;
thread1 = new Thread(new ThreadStart(ThreadMethod));
thread2 = new Thread(new ThreadStart(ThreadMethod));
thread1.Start();
thread2.Start();
thread1.Join();
thread2.Join();
Console.ReadKey();
}
static void ThreadMethod()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine(RotatorIndex.ID);
}
}
///
/// This is a thread safe rotator index
///
class RotatorIndex
{
private static int _iSeq = 0;
private static int _digits = 3;
public static int Seq
{
get
{
return Interlocked.Increment(ref _iSeq) & 0x7FFF % (int)Math.Pow(10,_digits);
}
}
public static string ID
{
get
{
return Seq.ToString().PadLeft(_digits,'0');
}
}
///
/// Use it just for test
///
public static int Init
{
set
{
_iSeq = value;
}
}
}
}
}
6/21/12
Localized type conversion
If you need a DateTime or double convertion depending on system localization here are some examples:
Date to string
Date to string
DateTime dt = new DateTime(2012, 06, 13, 17, 50, 00);
string date_US = dt.ToString(new CultureInfo("en-US").DateTimeFormat);
string date_GB = dt.ToString(new CultureInfo("en-GB").DateTimeFormat);
string date_PL = dt.ToString(new CultureInfo("pl-PL").DateTimeFormat);
string date_RU = dt.ToString(new CultureInfo("ru-RU").DateTimeFormat);
Console.WriteLine("date_US = {0}", date_US);
Console.WriteLine("date_GB = {0}", date_GB);
Console.WriteLine("date_PL = {0}", date_PL);
Console.WriteLine("date_RU = {0}", date_RU);
/*
date_US = 6/13/2012 5:50:00 PM
date_GB = 13/06/2012 17:50:00
date_PL = 2012-06-13 17:50:00
date_RU = 13.06.2012 17:50:00
*/
String to date
date_US = "6/13/2012 5:50:00 PM";
date_GB = "13/06/2012 17:50:00";
date_PL = "2012-06-13 17:50:00";
date_RU = "13.06.2012 17:50:00";
DateTime dt_US = Convert.ToDateTime(date_US, new CultureInfo("en-US").DateTimeFormat);
DateTime dt_GB = Convert.ToDateTime(date_GB, new CultureInfo("en-GB").DateTimeFormat);
DateTime dt_PL = Convert.ToDateTime(date_PL, new CultureInfo("pl-PL").DateTimeFormat);
DateTime dt_RU = Convert.ToDateTime(date_RU, new CultureInfo("ru-RU").DateTimeFormat);
Console.WriteLine("Dates Compre {0}", DateTime.Compare(dt_US, dt_GB));
Console.WriteLine("Dates Compre {0}", DateTime.Compare(dt_GB, dt_PL));
Console.WriteLine("Dates Compre {0}", DateTime.Compare(dt_PL, dt_RU));
/*
Dates Compre 0
Dates Compre 0
Dates Compre 0
*/
Double to string and string to double
double d = 1003.045;
string double_US = Convert.ToString(d, new CultureInfo("en-US").NumberFormat);
string double_PL = Convert.ToString(d, new CultureInfo("pl-PL").NumberFormat);
Console.WriteLine("double_US = {0}", double_US);
Console.WriteLine("double_PL = {0}", double_PL);
/*
double_US = 1003.045
double_PL = 1003,045
*/
double_US = "1003.045";
double_PL = "1003,045";
double d_US = Convert.ToDouble(double_US, new CultureInfo("en-US").NumberFormat);
double d_PL = Convert.ToDouble(double_PL, new CultureInfo("pl-PL").NumberFormat);
Console.WriteLine("Double compare {0}", d_US == d_PL);
/*
Double compare True
*/
5/2/12
SSH
Recently I was thinking of SSH support in my TCExecutor application.
I've found some 3rd party libraries which support SSH.... but... I think I'll try to implement it on my own...
Here are some specs:
- The Secure Shell (SSH) Protocol Assigned Numbers - RFC 4250
- The Secure Shell (SSH) Protocol Architecture - RFC 4251
- The Secure Shell (SSH) Authentication Protocol - RFC 4252
- The Secure Shell (SSH) Transport Layer Protocol - RFC 4253
- The Secure Shell (SSH) Connection Protocol - RFC 4254
4/30/12
TCExecutor v0.0.1 released
TCExecutor - Telnet Command Executor C# open source project is released in version 0.0.1
Thanks to TCExecutor you can add communication/configuration layer to your application in just four steps:
Project can be found here: https://bitbucket.org/chesti/tcexecutor/
You can clone code from git: git clone https://bitbucket.org/chesti/tcexecutor.git
Thanks to TCExecutor you can add communication/configuration layer to your application in just four steps:
- Create TCExecutor object
- Define commands
- Hook up your code to commands events (TCExecutor is multithread/multiconection application remeber that your code must be threadsafe)
- Start TCExecutor listener.
Commands style:
>command1 subcommand1 ... subcommandN param1=X1 ... paramN=XN ARGV1...ARGVN
Features:
Project in action>command1 subcommand1 ... subcommandN param1=X1 ... paramN=XN ARGV1...ARGVN
Features:
- Adds network communication layer to your application
- Supports multiple connections. For each connection separate session is established.
- Commands can be defined at your application startup.
- Each command has separate event to which you can connect to.
- Each command has a short and long help string which helps end user to navigate through available options.
- Enable SSH connections to the TCExecutor.
- Add simple user autentication. Login password.
Project can be found here: https://bitbucket.org/chesti/tcexecutor/
You can clone code from git: git clone https://bitbucket.org/chesti/tcexecutor.git
using TelentCommandExecutor;
class ProgramObject
{
private TCExecutor executorSRV;
public ProgramObject()
{
//create an executor
executorSRV = new TCExecutor();
//hook up some commands
CmdExecutor e;
e = executorSRV.AddCommand("set name");
e.ExecutorEvent += new CmdExecutor.ExecutorHandler(Execute_SetName);
e.HelpString = "set name n=name";
e.ShortHelpString = "Dispalys your name";
//listen to the any end point on port 9999
System.Net.IPEndPoint endPoint = new System.Net.IPEndPoint(System.Net.IPAddress.Any, 9999);
//start executor
executorSRV.StartServer(endPoint);
Console.ReadKey();
//stop executor and disconnect all users.
executorSRV.StopServer();
}
//handle command event
string Execute_SetName(Cmd command)
{
if (command.CmdParams.ContainsKey("n"))
{
return String.Format("Your name is: {0}", command.CmdParams["n"]);
}
else
{
return "Use n= parameter";
}
}
}
12/30/11
Nikon D40 Intervalometer
Is it possible to create time lapse pictures with Nikon D40... yes...
You can find results here:
result1
result2
You are a software engineer... you can do anything... it is just a matter of time ;)
You can find results here:
result1
result2
You are a software engineer... you can do anything... it is just a matter of time ;)
Subscribe to:
Comments (Atom)
