Flyttar till..

http://vs2010world.wordpress.com/

Jag flyttar till....

Vill få lite bättre struktur på den här bloggen och blogg.se har inte vad jag behöver så jag kommer att flytta till wordpress.com och sedan får vi se hur det blir.

http://vs2010world.wordpress.com/

Kommer fortfarande till större delen handla om C# och min utveckling från IT-Tekniker till Systemutvecklare


Ny vecka och fortsättning

Nu har det blivit en ny vecka igen.
Otroligt vad tiden bara rusar iväg, bara 26 dagar kvar till jul och endast en vecka kvar till jag åker till Stockholm på kurs (LearningTree).
Den kursen kommer att bli riktigt najs må jag säga :-) Hoppas på att man kommer att lära sig och behålla kunskapen också där ifrån.

Under förra veckan har jag pysslat en hel del med mitt lilla "försäkrings"-program (Lektion 7).
Har nog inte tillkommit så himla många nya funktioner i det förrutom ett par men har mer sysslat med felhanteringen bakom det och försökt hitta olika sätt att "göra det på".

Lägger till lite bilder och lite kod till de olika delarna så får vi se vad som händer efter det :-)
Det jag tror har utökat huvudmenyn lite är Uppdatera, Sortera och Visa Premie (E, F och G).
Se bilden nedan:




E - Uppdatera befintlig försäkring


Denna funktion börjar med att användaren matar in försäkringsid för vilken försäkrings som skall ändras.
Sendan får man skriva in samtliga värden igen med även de uppdateringar man vill göra.
I detta fall kommer start / enddate att uppdateras från den dagen man gör uppdateringen och 1 år fram.
Sedan får man se vad tidigare värden var och så får man även se de nya ändrade.

Program.cs

case "E":
case "e":
Console.Clear();
Console.Write("Ange försäkrings nummer du vill uppdatera: ");
if (!Int32.TryParse(Console.ReadLine(), out InsuranceID) || InsuranceID < 1)
{
Console.WriteLine("Du måste ange ett försäkringsnummer!");
do
{
Console.Write("Vänligen, Ange försäkringsnummer du vill uppdatera: ");
}
while (!Int32.TryParse(Console.ReadLine(), out InsuranceID) || InsuranceID < 1);
}

Insurance.InsuranceID = InsuranceID;
Insurance.Load();

Insurance incHist = new Insurance();
incHist.InsuranceID = Insurance.InsuranceID;
incHist.StartDatePeriod = Insurance.StartDatePeriod;
incHist.EndDatePeriod = Insurance.EndDatePeriod;
incHist.PremiumValue = Insurance.PremiumValue;
incHist.Value = Insurance.Value;
incHist.Rates = Insurance.Rates;
incHist.InsuranceHolder = Insurance.InsuranceHolder;
Insurance.copyObject(incHist);

Console.Write("Ange nytt Premiebelopp: ");
Insurance.PremiumValue = CheckPremiumValue(PremiumValue);
Console.Write("Ange ny Valuta: ");
Insurance.Value = CheckValue(Value);
Console.Write("Ange nya antal rater: ");
Insurance.Rates = CheckRates(Rates);
Console.Write("Ange ny försäkringstagaren: ");
Insurance.InsuranceHolder = CheckInsuranceHolder(InsuranceHolder);


// Tar hand om svaret från Insurance.Update i Insurance.cs
if (Insurance.Update())
{
Console.Clear();
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine("\nTidigare försäkringsinformation:");
Console.ResetColor();
Console.WriteLine("Försäkringsnummer: " + incHist.InsuranceID + "\nFörsäkringstagare: " + incHist.InsuranceHolder + "\nStartdatum: " + incHist.StartDatePeriod.ToShortDateString() + "\t\tSlutdatum: " + incHist.EndDatePeriod.ToShortDateString() + "\nPremiebelopp: " + incHist.PremiumValue + "\t\tValuta: " + incHist.Value + "\nAntal Rater: " + incHist.Rates);
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine("\n\nUppdaterad försäkringsinformation:");
Console.ResetColor();
Console.WriteLine("Försäkringsnummer: " + Insurance.InsuranceID + "\nFörsäkringstagare: " + Insurance.InsuranceHolder + "\nStartdatum: " + Insurance.StartDatePeriod.ToShortDateString() + "\t\tSlutdatum: " + Insurance.EndDatePeriod.ToShortDateString() + "\nPremiebelopp: " + Insurance.PremiumValue + "\t\tValuta: " + Insurance.Value + "\nAntal Rater: " + Insurance.Rates);
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("\nFörsäkringens period förnyas automatiskt 1 år från dagensdatum vid ändring!\n");
Console.ResetColor();
Console.WriteLine("\nTack, försäkringen uppdaterades i databasen!\nTryck på enter för att forstätta till huvudmenyn");
Console.ReadLine();
}
else
{
Console.Clear();
Console.WriteLine("Det gick åt helvete att sprar ner/uppdatera i databasen, kontakta databasadmin för hjälp!");
Console.WriteLine("Tryck enter för att återgå till huvudmenyn");
Console.ReadLine();
}

break;


Insurance.cs

public bool Update()
{
Insurance.DeleteInsurance(InsuranceID);
Insurance Save = new Insurance();
Save = this;

return Save.Save();
}

Denna hänvisar ju då även till metoden Save i som finns ovan. (Fortfarande i Insurance.cs)

public bool Save()
{
char pad = ' ';
StringBuilder data = new StringBuilder();
data.Append(InsuranceID.ToString().PadRight(10, pad));
data.Append(StartDatePeriod.ToShortDateString().Replace("-", "").Replace("/", "").Replace(".", "").PadRight(8, pad));
data.Append(EndDatePeriod.ToShortDateString().Replace("-", "").Replace("/", "").Replace(".", "").PadRight(8, pad));
data.Append(PremiumValue.ToString().PadRight(10, pad));
data.Append(Value.PadRight(3, pad));
data.Append(Rates.ToString().PadRight(2, pad));
data.Append(InsuranceHolder.PadRight(50, pad));
return FredrikDAL.DatabaseHelper.SaveInsurance(data.ToString());
}


DatabaseHelper.cs

public static bool SaveInsurance(string data)
{
string path = @"C:\Sytem007\Database\insurancedb.txt";

// Kontrollerar om ovanstående path är ok och då att filen finns
if (!File.Exists(path))
{
using (StreamWriter sw = File.CreateText(path))
{
sw.Write("");
}
}
using (StreamWriter sw = File.AppendText(path))
{
sw.WriteLine("{0}", data);
return true;
}
}


F - Sortera databasen:


Detta med sortera databasen behövs ju inte direkt OM man har en SQL eller liknande.
När man som jag gör och kör mot en fin textfil och den kommer lite i obalans tillsammans med den ovan, uppdatera en försäkring.
Då kan det plötsligt bli så att ordninge på InsuranceID inte riktigt är ok.
ex.
2
4
3
1

skulle det i detta fall vara så där och så lägger man till en ny försäkring så blir det lite skit som jag har det just nu eftersom jag kollar vad sista rades InsuranceID är och ökar det värdet med 1 för nästkommande försäkring.
Jah ni fattar säkerligen, så det jag använder den här metoden till är mer för nyskapande av försäkring så ropar jag på denna metod innan jag börjar att skapa en ny.

Hur ser den ut då? (går bara in på metoden i BLL och sedan hur DAL funkar)

Insurance.cs

public bool Sort()
{
if (!DatabaseHelper.SortDatabase())
{
return false;
}
return true;
}


DatabaseHelper.cs

public static bool SortDatabase()
{
List<string> lines = new List<string>();
string path = @"C:\Sytem007\Database\insurancedb.txt";
string temppath = @"C:\Sytem007\Database\tempinsurancedb.txt";
if (!File.Exists(path))
{
return false;
}

if (!File.Exists(temppath))
{
using (StreamWriter sw = File.CreateText(temppath))
{
sw.Write("");
}
}
using (StreamReader r = new StreamReader(new FileStream(path, FileMode.Open)))
{
string line;
while ((line = r.ReadLine()) != null)
{
lines.Add(line);
}
}
lines.Sort();
using (var sw = new StreamWriter(temppath))
{
for (int i = 0; i < lines.Count; i++)
{
string ListValue = lines[i] as string;
sw.WriteLine(ListValue);
}
sw.Close();
}
File.Delete(path);
File.Move(temppath, path);
return true;
}




G - Vad för premie:


Poängen med denna var då att skapa en metod som returnerar en decimal och som skall heta GetPremium.
Det den gör är att användaren får ange ett försäkrings ID och den skall returnera PremiumValue samt att jag även la till att den returnerar just efter PremiumValue även Value (vilken valuta det är).

Jag har även förberätt för att ta fram andra värden om så behövs.

Program.cs (UIL)

case "G":
case "g":
Console.Clear();
Console.Write("Ange försäkrings nummer: ");
if (!Int32.TryParse(Console.ReadLine(), out InsuranceID) || InsuranceID < 1)
{
Console.WriteLine("Du måste ange ett försäkringsnummer!");
do
{
Console.Write("Vänligen, Ange försäkringsnummer: ");
}
while (!Int32.TryParse(Console.ReadLine(), out InsuranceID) || InsuranceID < 1);
}
Insurance.InsuranceID = InsuranceID;    // Skickar över det inmatade försäkrings ID till Insruance.cs
if (Insurance.GetPremium() == 0)
{
Console.WriteLine("Tyvärr kan jag inte hitta försäkringen!");
}
Console.WriteLine("Försäkringsnummer: " + Insurance.InsuranceID + " Har premie: " + Insurance.PremiumValue + " " +Insurance.Value + "\nTryck enter för att fortsätta.");
Console.ReadLine();
break;


Insurance.cs


public decimal GetPremium()
{
string databasevalue = DatabaseHelper.LoadInsurance(InsuranceID, "insurancedb.txt", 10);
if (databasevalue == "")
{
decimal FaultOut = 0;
return FaultOut;
}
StartDatePeriod = Convert.ToDateTime(Convert.ToDecimal(databasevalue.Substring(10, 8)).ToString("####-##-##"));
EndDatePeriod = Convert.ToDateTime(Convert.ToDecimal(databasevalue.Substring(18, 8)).ToString("####-##-##"));
PremiumValue = Convert.ToDecimal(databasevalue.Substring(26, 10));
Value = databasevalue.Substring(36, 3);
Rates = Convert.ToInt32(databasevalue.Substring(39, 2));
InsuranceHolder = databasevalue.Substring(41);
return PremiumValue;
}



DatabaseHelper.cs

public static string LoadInsurance(int InsuranceID, string databasename, int lengthofidfieald)
{
string path = @"C:\Sytem007\Database\" + databasename;

int tempID;
// Kontrollerar om ovanstående path är ok och då att filen finns
if (!File.Exists(path))
{
throw new System.IO.FileNotFoundException("Databasen kunde inte hittas!", databasename);
}

// Läser igenom hela textfilen och letar efter angivet försäkringsID
// Returnerar den raden / försäkringen.
using (StreamReader sr = File.OpenText(path))
{
string rl = "";
while (!sr.EndOfStream)
{
rl = sr.ReadLine();
tempID = Convert.ToInt32(rl.Remove(lengthofidfieald));
if (tempID == InsuranceID)
{
return rl;
}

}
return "";
}
}

Projekt som Lektion 7 forts.

Hej på er,

Har varit helt fördjupad i detta med projektet.
Det går riktigt bra och har avancerat en aningen till att fixa försäkring via meny osv.
Skall försöka visa lite hur det är byggt just nu, håller på med en massa indatakontroller som inte är 100% klara än så ni får ha lite överseende med det hela.

Det hela bygger nu mera på UIL, BLL och även då DAL (min superfina notepad databas :P).
I FredrikUIL.UIL har jag då Program.cs som då är mer det användaren ser, matar in och pressenteras.
I FredrikBLL.BLL finns det Insurance.cs där just saker som skall göras med försäkringarna, dvs skickas vidare för inmatning till databasen osv.
Sedan har vi FredrikDAL.DAL som har DatabaseHelper.cs där jag har olika funktioner mot just min textfil.

Så här ser det ut just nu. (Gud vad jag önskade att man kunde få med formateringen också!)

FredrikUIL.UIL / Program.cs

using FredrikBLL.BLL;  // Alias

namespace FredrikUIL
{
public class Program
{
public static void Main(string[] args)
{
string myChoice;
Insurance Insurance = new Insurance();
do
{
// Här börjar Huvudmenyn!
Console.Clear();
Console.WriteLine("Välkommen till Försäkringsbolaget AB");
Console.WriteLine("Huvudmeny\n");

Console.WriteLine("A - Lägg till en försäkring");
Console.WriteLine("B - Ta bort en försäkring");
Console.WriteLine("C - Titta på alla försäkringar");
Console.WriteLine("D - Leta efter en försäkring");
Console.WriteLine("Q - Bye bye, ta ta, quit\n");

Console.Write("Dina val (A,B,C,D or Q): ");

myChoice = Console.ReadLine();

// Här börjar underdelarna till huvudmenyn beroende på val i just huvudmenyn.
switch (myChoice)
{
case "A":
case "a":
decimal PremiumValue = 0;
int InsuranceID = 0;
string Value = " ";
int Rates = 0;
string InsuranceHolder = " ";

Console.Clear();
Console.WriteLine("Du vill lägga till en försäkring\n");
Console.Write("Ange Premiebelopp: ");
PremiumValue = CheckPremiumValue(PremiumValue);
Console.Write("Ange valuta: ");
Value = CheckValue(Value);
Console.Write("Ange antal rater: ");
Rates = CheckRates(Rates);
Console.Write("Ange försäkringstagaren: ");
InsuranceHolder = CheckInsuranceHolder(InsuranceHolder);

// Sätter upp Startdate och Enddate till DateTime
DateTime StartDatePeriod = new DateTime();
StartDatePeriod = DateTime.Now;
DateTime EndDatePeriod = new DateTime();
EndDatePeriod = DateTime.Now;

Insurance.InsuranceID = InsuranceID;
Insurance.StartDatePeriod = StartDatePeriod.ToShortDateString().Replace("-", "").Replace("/", "").Replace(".", "");
Insurance.EndDatePeriod = EndDatePeriod.AddYears(1).ToShortDateString().Replace("-", "").Replace("/", "").Replace(".", "");
Insurance.PremiumValue = Convert.ToDecimal(PremiumValue);
Insurance.Value = Value.ToUpper();
Insurance.Rates = Rates;
Insurance.InsuranceHolder = InsuranceHolder;
Insurance.save();

Console.WriteLine("\nTack, försäkringen skapades i databasen!\n");
break;

case "B":
case "b":
Console.Clear();
Console.WriteLine("Du vill plocka bort en försäkring!");
Console.Write("Ange det försäkringsnummer du vill plocka bort: ");
break;


case "C":
case "c":
Console.Clear();
Console.WriteLine("Här nedan listas alla försäkringa från databasen.");
Console.Write(Insurance.ReadAllInsurances());
break;
case "D":
case "d":
Console.Clear();
Console.Write("Ange försäkrings nummer: ");
int MyID = Convert.ToInt32(Console.ReadLine());
if (MyID == 0)
{
Console.Write("Du måste ange ett försäkrings nummer!");
break;
}
else
{
Insurance.InsuranceID = MyID;
Console.Clear();
Console.WriteLine("Försäkring id " + MyID + " " + "tillhör:\n");
Console.WriteLine(Insurance.SearchForID(MyID));
break;
}

case "Q":
case "q":
Console.WriteLine("OK, Bye Bye!");
break;
default:
Console.WriteLine("{0} är inte ett giltigt val!", myChoice);
break;
}
Console.Write("\nTryck på en tangent för att återgå till huvudmenyn.");
Console.ReadLine();
Console.WriteLine();
}
while (myChoice != "Q" && myChoice != "q");

}


// Kontrollerar om PremiumValue verkligen håller sig till en decimal
private static decimal CheckPremiumValue(decimal PremiumValue)
{
if (!decimal.TryParse(Console.ReadLine(), out PremiumValue))
{
do
Console.Write("Felaktigt värde!\nVänligen, Ange Premiebelopp: ");
while (!decimal.TryParse(Console.ReadLine(), out PremiumValue));
}
return PremiumValue;
}

// Kontrollerar om Value har ett värde som går att läsa
private static string CheckValue(string Value)
{
Value = Console.ReadLine();

if (String.IsNullOrEmpty(Value))
{
while (String.IsNullOrEmpty(Value))
{
Console.Write("Felaktigt värde!\nVänligen, ange valuta (ex. SEK, EUR): ");
Value = Console.ReadLine();
}
}

return Value;
}

private static int CheckRates(int Rates)
{
if (int.TryParse(Console.ReadLine(), out Rates))
{
do
Console.Write("Felaktigt värde!\nVänligen, ange antal rater: ");
while (!int.TryParse(Console.ReadLine(), out Rates));

}
return Rates;
}

// Kontrollerar om InsuranceHolder har ett värde som går att läsa
private static string CheckInsuranceHolder(string InsuranceHolder)
{
if (String.IsNullOrEmpty(InsuranceHolder))
{
while (String.IsNullOrEmpty(InsuranceHolder))
{
Console.Write("Felaktigt värde!\nVänligen, ange försäkringstagarens namn: ");
InsuranceHolder = Console.ReadLine();
}
}

return InsuranceHolder;
}




FredrikBLL.BLL / Insurance.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FredrikDAL;

namespace FredrikBLL.BLL
{
public class Insurance
{

public int InsuranceID { get; set; }            // Försäkringsnummer
public string StartDatePeriod { get; set; }     // Startdatum på försäkringsperioden
public string EndDatePeriod { get; set; }       // Slutdatum på försäkringsperioden
public decimal PremiumValue { get; set; }       // Premiebelopp
public string Value { get; set; }               // Valuta  ex. SEK, EUR, NOK, DKR
public int Rates { get; set; }                  // Antal rater
public string InsuranceHolder { get; set; }      // Försäkringstagare
// public Insurance();                          // Default-konstruktor
// public Insurance(int InsuranceID);           // Konstruktor som tar ett försäkringsnummer

public bool save()
{
char pad = ' ';
StringBuilder data = new StringBuilder();
data.Append(GetMaxInsuranceID().PadRight(10, pad));
data.Append(StartDatePeriod.ToString().PadRight(8, pad));
data.Append(EndDatePeriod.ToString().PadRight(8, pad));
data.Append(PremiumValue.ToString().PadRight(10, pad));
data.Append(Value.PadRight(3, pad));
data.Append(Rates.ToString().PadRight(2, pad));
data.Append(InsuranceHolder.PadRight(50, pad));
return FredrikDAL.DatabaseHelper.Insert(data.ToString());
}

private static string GetMaxInsuranceID()
{
return DatabaseHelper.read();
}

public static string ReadAllInsurances()
{
return DatabaseHelper.readAll();
}

public static string SearchForID(int MyID)
{
int InsuranceID = MyID;
return DatabaseHelper.SearchAndGet(InsuranceID);
}
}
}




FredrikDAL.DAL / DatabaseHelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace FredrikDAL
{
public class DatabaseHelper
{
// Insert har hand om inmatning av data till insurancedb.txt
public static bool Insert(string data)
{
string path = @"C:\Sytem007\Database\insurancedb.txt";

// Kontrollerar om ovanstående path är ok och då att filen finns
if (!File.Exists(path))
{
using (StreamWriter sw = File.CreateText(path))
{
sw.Write("");
}
}
using (StreamWriter sw = File.AppendText(path))
{
sw.WriteLine("{0}", data);
return true;
}
}

public static string read()
{
string path = @"C:\Sytem007\Database\insurancedb.txt";

// Kontrollerar om ovanstående path är ok och då att filen finns
if (!File.Exists(path))
{
using (StreamWriter sw = File.CreateText(path))
{
sw.Write("");
}
}
// Läser textfilens sista rad in i s.
using (StreamReader sr = File.OpenText(path))
{
string s;
string id = "1";

while (!sr.EndOfStream)
{
s = sr.ReadLine();
if (sr.Peek() == -1)
{
s = s.Remove(10);
int InsuranceID = Convert.ToInt32(s);
InsuranceID++;
id = Convert.ToString(InsuranceID);
}
}
return id;
}

}

// readALL Läser igenom alla raderna i insurancedb.txt och pressenterar de
public static string readAll()

{
string path = @"C:\Sytem007\Database\insurancedb.txt";

// Kontrollerar om ovanstående path är ok och då att filen finns
if (!File.Exists(path))
{
using (StreamWriter sw = File.CreateText(path))
{
sw.Write("");
}
}
// Läser genom hela textfilen från början till slut och returnerar det till "line".
using (StreamReader sr = File.OpenText(path))
{
string line;
line = sr.ReadToEnd().Replace("\n", "");  // plockar med replace bort ett extra "newline"

return line;
}

}

// SearchAndGet har ett invärde (MyID) som är försäkringsnummret och som går ner o kollar om den finns
// Finns försäkringen pressenteras den på ett "snyggt" sätt.
public static string SearchAndGet(int MyID)
{
string path = @"C:\Sytem007\Database\insurancedb.txt";
string ReturnID = "";
// Kontrollerar om ovanstående path är ok och då att filen finns
if (!File.Exists(path))
{
using (StreamWriter sw = File.CreateText(path))
{
sw.Write("");
}
}

// Läser igenom hela textfilen och letar efter angivet försäkringsID
// Returnerar den raden / försäkringen.
using (StreamReader sr = File.OpenText(path))
{
string s;
while (!sr.EndOfStream)
{
s = sr.ReadLine();
string tempID = s.Remove(10);
int InsuranceID = Convert.ToInt32(tempID);

if (InsuranceID == MyID)
{
string tempStartDate = s.Substring(10, 8);
string tempEndDate = s.Substring(18, 8);
string tempPremiumValue = s.Substring(26, 10);
string tempValue = s.Substring(36, 3);
string tempRate = s.Substring(39, 2);
string tempInsuraceHolder = s.Substring(41);
ReturnID = "Försäkringsnummer: " + InsuranceID + "\n" + "Startdatum: " + tempStartDate + "\n" + "Slutdatum: " + tempEndDate + "\n" + "Premiebelopp: " + tempPremiumValue + "\n" + "Valuta: " + tempValue + "\n" + "Antal rater: " + tempRate + "\n" + "Försäkringstagare: " + tempInsuraceHolder + "\n";
}

}
if (ReturnID == "")
{
ReturnID = "Tyvärr finns ej en försäkring på det inmatade försäkringsnummret!";
}
return ReturnID;
}
}
}
}


Hur detta ser ut just nu kan ni se här: (Klicka på bilderna för att få de större!)


Ett litet större projekt som Lektion 7

Fick just litet större projekt att syssla med nu vilket verkar jävligt kul.

Lektion 7

  1. Skapa en ny publik klass i ditt BLL-Projekt som heter Insurance.
    Skapa properties för nedanstående egenskaper hos klassen med lämpligt namn och lämplig datatyp.
    (TIPS! Skriv "prop" och tryck 2 gågner på Tab)

    • Försäkringsnummer
    • Startdatum på försäkringsperioden
    • Slutdatum på försäkringsperioden
    • Premiebelopp
    • Valua
    • Antal rater
    • Försäkringstagare

    Lägg även till en default-konstruktor(inga parametrar) och en konstruktor som tar ett försäkringsnummer.

Det där är det första jag skall göra, kommer att fylla på detta inlägg när jag kommer till steg 2 senare.
Nu blir det att läsa lite, är dock redan i skrivandets stund klar med skapandet av properties som jag tror kommer att passa in. Och det är följande:

  • public int InsuranceID { get; set; }                  // Försäkringsnummer
  • public DateTime StartDatePeriod { get; set; }   // Startdatum på försäkringsperioden
  • public DateTime EndDatePeriod { get; set; }     // Slutdatum på försäkringsperioden
  • public decimal PremiumValue { get; set; }        // Premiebelopp
  • public decimal Value { get; set; }                     // Valuta
  • public int Rates { get; set; }                             // Antal rater
  • public string InsuraceHolder { get; set; }           // Försäkringstagare

Mer info kommer senare...

Fortsättning på namespace

Fortsätter från detta.

3) Ta bort referensen till ClassLibrary1 och lägg till den på nytt men denan gång i debug.
Debugga projektet och försök "stiga in i" metoden med F11.

Anledningen till detta med kontrollen av debugging / Stiga in i för både i Release läge och Debug läge var just för att i web appar går det tydligen inte att göra det. Vet nu dock inte riktigt varför det fungerade i detta, kanske har med att det var i Console App.
Skall väll undersöka saken lite närmare om det är så att det skall vara så eller om jag i misstag kommit åt någon "feat." som stänger av den funktionen :-)
Men nu fortsätter vi...

4) Använd ovanstående program (finns i tidigare inlägg) men lägg till ett using-statement till ClassLibrary1.BLL och ta bort "onödig kod" vid metodanropet.

Men lägger helt enkelt bara till i Program.cs
using ClassLibrary1.BLL;

Så kan man i koden även ändra från:
Console.Write("Är det en arbetsdag idag? " + ClassLibrary1.BLL.Helper.myToday());

Till:
Console.Write("Är det en arbetsdag idag? " + Helper.myToday());

5) Skapa ytterligare ett nytt projekt av typen Class Library och där den till ClassLibrary2.
Spara ner den i System007-mappen. Skapa sedan en klass som heter Helper i detta projekt och lägg denna i ett namespace som heter ClassLibrary2.BLL. Skriv sedan en publik statisk metod som med en DateTime svara på frågan vad klockan är just nu. Kompilera i debug och release.

(ClassLibrary2)Helper.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ClassLibrary2.BLL
{
public class Helper
{
public static string TimeRightNow()
{
DateTime time = DateTime.Now; //sätter time till en DateTime och kör in vad datum/tid är just nu
return time.ToShortTimeString(); // returnerar värdet från time med kort variant av tid hh:mm
// return time.ToLongTimeString(); // returnerar värdet från time fast med lång variant av tid hh:mm:ss
}
}
}


6) Lägg till referens till ClassLibrary2.BLL i ditt huvudprojekt och lägg till ett using-statement till denna. Anropa sedan metoden som svara på om det är en arbetsdag och metoden som svara på var klockan är just nu och meddela användaren det.

Svar: Här kommer det att krocka om man inte gör nått åt befintlig kod.
Eftersom koden just nu är:
...
using ClassLibrary1.BLL;
...
Console.Write("Är det en arbetsdag idag? " + Helper.myToday());

Och jag skulle då lägga till klockan där så kommer det att bli så här:
using ClassLibrary1.BLL;
using ClassLibrary2.BLL;

Console.Write("Är det en arbetsdag idag? " + Helper.myToday());
Console.Write("\nKlockan är just nu: " + Helper.TimeRightNow());

så kommer den att gnälla över Helper! Den finns ju på 2 ställen och hur vet man i koden vilken ClassLibrary den skall använda?
Well i detta läge är nog tanken att jag skall göra följande:
...
Console.Write("Är det en arbetsdag idag? " + ClassLibrary1.BLL.Helper.myToday());
Console.Write("\nKlockan är just nu: " + ClassLibrary2.BLL.Helper.TimeRightNow());

Man kan även som nästa del i lektionen gör också.

7) Använd ovanstående program och modifiera using-satserna så dom får varsitt alias.
ClassLibrary1.BLL får heta BLL_1 och ClassLibrary2.BLL får heta BLL_2.
Modifiera anropen till de 2 metoderna så att dom använder resp. alias.

Svar: Så det jag gör är att ändra lite i Programs.cs till följande
using BLL1 = ClassLibrary1.BLL.Helper;  // Alias
using BLL2 = ClassLibrary2.BLL.Helper;  // Alias
...

onsole.Write("Är det en arbetsdag idag? " + BLL1.myToday()); // Skriver ut resultatet från ClassLibrary1.BLL.Helper.myToday
Console.Write("\nKlockan är just nu: " + BLL2.TimeRightNow()); // Skriver ut resultatet från ClassLibrary2.BLL.Helper.TimeRightNow

Och otroligt nog blir då svaret samma!

Är det en arbetsdag idag? True
Klockan är just nu: 15:39




Allt detta med namespace har varit inom samma "Solution / FredrikUIL" så skall plocka ut dessa 2 ClassLibrarys och lägga dom i en egen Solution och se om det går bra att anropa de även från den?!
Vi får se :-)





Namespaces exempel

Så då har jag börjat läsa på om Namespaces och kommer väll inte att skriva om det så mycket mer här än att visa lite övningar och exempel.

Lektion 06
1) Skapa ett nytt projekt av typen Class Library och döp den till ClassLibrary1. Lägg det i System007-mappen (lokal katalog på min dator). Skapa sedan i detta projekt en klass som heter Helper (jag döpte bara om den .cs fil(class1.cs) till helper) och lägg denna i ett namespace som heter ClassLibrary1.BLL.
Skriv i Helper en publik statisk metod som med ett bool svarar på frågan om det är en arbetsdag idag, d.v.s måndag t.o.m fredag. Kompilera den i debug och release.

helper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ClassLibrary1.BLL
{
public class Helper
{
public static bool myToday()
{
DayOfWeek today = DateTime.Today.DayOfWeek;
if (today == DayOfWeek.Monday)
{
return true;
}
else if (today == DayOfWeek.Tuesday)
{
return true;
}
else if (today == DayOfWeek.Wednesday)
{
return true;
}
else if (today == DayOfWeek.Thursday)
{
return true;
}
else if (today == DayOfWeek.Friday)
{
return true;
}
else
{
return false;
}
}
}
}


2) Lägg till referens till realease-versionen av ClassLibrary1 i ditt huvudprojekt. Anropa sedan metoden för att ta reda på om du jobbar på din fritid eller inte och meddela användaren. Använde inte using-statement(using ClassLibrary1.BLL). Debugga projektet och försök "stiga in i" metodem med F11.

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace FredrikUIL
{
public class Program
{
public static void Main(string[] args)
{
Console.Write("Är det en arbetsdag idag? " + ClassLibrary1.BLL.Helper.myToday());
Console.ReadLine();
}
}
}

Min "Solution explorer" för att visa vart referensen ligger till ClassLibrary1:


Resulatatet so far:
Tillhörande Lektion 02  2)


OUT myCalcOut

Som sagt, det var ju nästan rätt det jag fixade till i tidigare inlägg.
Dock helt fel eftersom det var just användning av OUT parametern och inte ref jag skulle använda mig av.

Men så efter lite meck och lite hjälp av N då jag donade till det lite fel så vart det rätt.
Vill nog dock kontrollera lite mer om vad de stora skillnaderna är mellan just out och ref. Båda två fungerar uppenbarligen.

Här kommer min kåd för det hela då.

Program.cs
Console.Write("Enter value 1: ");
decimal value1 = Convert.ToDecimal(Console.ReadLine());

Console.Write("Enter value 2: ");
decimal value2 = Convert.ToDecimal(Console.ReadLine());

string out1 = "";
string out2 = "";
string out3 = "";
string out4 = "";
FredrikBLL.BLL.Functions functions = new FredrikBLL.BLL.Functions();
functions.myCalcOut(value1, value2, out out1, out out2, out out3, out out4);

Console.WriteLine("Svaret nedan: \n" + out1 + out2 + out3 + out4);
Console.ReadLine();


Functions.cs
public void myCalcOut(decimal value1, decimal value2, out string out1, out string out2, out string out3, out string out4)
{
decimal sumtemp;
sumtemp = Convert.ToDecimal(value1 + value2);
out1= Convert.ToString(value1 + "+" + value2 + "=" + sumtemp + "\n");
sumtemp = Convert.ToDecimal(value1 - value2);
out2= Convert.ToString(value1 + "-" + value2 + "=" + sumtemp + "\n");
sumtemp = Convert.ToDecimal(value1 * value2);
out3= Convert.ToString(value1 + "*" + value2 + "=" + sumtemp + "\n");
sumtemp = Convert.ToDecimal(value1 / value2);
out4= Convert.ToString(value1 + "/" + value2 + "=" + sumtemp + "\n");
}

Men skall forska vidare lite i detta med out och ref för att just lära mig lite mer om det innan jag går vidare.

Fortsättning på ref i void metoder

Tror det går bra det här!

Lektion 05
8) Skriv ett program som från konsolen möjliggör input av 2 numreriska värden. Skriv en metod för beräkning som tar dessa 2 värden in, men som även tar 4 stycken out-parametrar in.
Tilldela dessa parametrar summan, differensen, produkten och kvot. Skriv sedan ut resultatet åt användaren utifrån out-parametrarna.
Ex.
tal1 = 5
tal2 = 5

5+5=10
5-5=0
5*5=25
5/5=1

Nu har jag dock när jag verkligen läser detta inte alls använt mig av out-parameterar utan av åter igen ref.
Men det är enkelt fixat i vilket fall.
Dock så får ni se hur jag löste detta med då ref och inte out.

Program.cs
Console.Write("Enter value 1: ");
decimal value1 = Convert.ToDecimal(Console.ReadLine());

Console.Write("Enter value 2: ");
decimal value2 = Convert.ToDecimal(Console.ReadLine());

string x = "";
FredrikBLL.BLL.Functions functions = new FredrikBLL.BLL.Functions();
functions.myCalcOut(ref value1, ref value2, ref x);

Console.WriteLine("Svaret nedan: \n" + x);
Console.ReadLine();

Functions.cs
public void myCalcOut(ref decimal value1, ref decimal value2, ref string x)
{
decimal sumtemp, sumtemp2, sumtemp3, sumtemp4;
string sumout = "";

sumtemp = Convert.ToDecimal(value1 + value2);
sumout += Convert.ToString(value1 + "+" + value2 + "=" + sumtemp + "\n");
sumtemp2 = Convert.ToDecimal(value1 - value2);
sumout += Convert.ToString(value1 + "-" + value2 + "=" + sumtemp2 + "\n");
sumtemp3 = Convert.ToDecimal(value1 * value2);
sumout += Convert.ToString(value1 + "*" + value2 + "=" + sumtemp3 + "\n");
sumtemp4 = Convert.ToDecimal(value1 / value2);
sumout += Convert.ToString(value1 + "/" + value2 + "=" + sumtemp4 + "\n");
x = sumout;
}

Jag får återkomma med kåden för OUT!


Helg och static void

Liten så här mental note till mig själv en fredags eftermiddag som denna.

public static void myName(string namnet)

VOID i detta fall kommer inte att returnera nått värde alls.
Så får vi se hur det här kommer att gå.

Skall läsa lite till sen blir det helg, så trevlig helg på er alla!


Trevlig helg på er alla!



Ej statisk metod

Tidigare övning/ar har jag använt mig av publika statiska metoder hela tiden.
Den senaste övningen var även den publik och statisk.
Nu har jag fixat till den så att den inte är statisk längre alls.

Fixat på följande sätt:

Program.cs

Console.Write("Ange 2-4 värden som är kommaseparerade (ex. 3,8,2,1): ");
string input = Convert.ToString(Console.ReadLine());
Console.WriteLine("Det värde du matade in är: \n");
Console.Write(input + "\n\n");
Console.Write("Vänligen vänta så anropar vi rätt metod........\n");

// Skapar ett nytt objekt funktions som länkningen till Functions finns i om man vill göra den mer dynamisk.
// Nu är resterande av "FredrikBLL.BLL.Functions.myValues" private så dessa kommer jag inte åt
// förrutom att det går nu via myValuesMain beroende på inmatade värden.
FredrikBLL.BLL.Functions functions = new FredrikBLL.BLL.Functions();
string output = functions.myValuesMain(input);
// string output = FredrikBLL.BLL.Functions.myValuesMain(input);   // Tidigare...

Console.WriteLine("Resultatet:\n" + Convert.ToString(output));
Console.ReadLine();


Functions.cs

/// <summary>
/// HuvudMetonden som kommer att anropa under metoder beroende på antalet angivna värden med kommaseparationer.
/// </summary>
/// <param name="value1">Parameter 1 / Tal 1</param>
/// <param name="value2">Parameter 2 / Tal 2</param>
/// <param name="value3">Parameter 3 / Tal 3</param>
/// <param name="value4">Parameter 4 / tal 4</param>
/// <returns>Returnerar vilken metod som returnerar ett svar.</returns>
public string myValuesMain(string input)
{
string output = "";
string[] inArray = input.Split(new char[] { ',' });

if (inArray.Length == 2)
{

string returnvalue = myValues(Convert.ToInt32(inArray[0]), Convert.ToInt32(inArray[1]));
return returnvalue;
}

else if (inArray.Length == 3)
{
string returnvalue = myValues(Convert.ToInt32(inArray[0]), Convert.ToInt32(inArray[1]), Convert.ToInt32(inArray[2]));
return returnvalue;
}

else if (inArray.Length == 4)
{
string returnvalue = myValues(Convert.ToInt32(inArray[0]), Convert.ToInt32(inArray[1]), Convert.ToInt32(inArray[2]), Convert.ToInt32(inArray[3]));
return returnvalue;
}
else
{
return output = "Hittade inget passande";
}
}

/// <summary>
/// Denna metod används av myValueMain som frågar vilken av metoderna myValues som
/// kan ta emot bara 2 parameters vilket denna gör.
/// </summary>
/// <param name="value1">parameter 1</param>
/// <param name="value2">parameter 2</param>
/// <returns>Returnerar vilken metid som användes och summan av värde 1 och 2</returns>
private string myValues(int value1, int value2)
{
int returnvalue = Convert.ToInt32(value1 + value2);
return Convert.ToString("Metod med 2 värden anropades.\nSumman av " + value1 + "+" + value2 + "=" + returnvalue);
}

/// <summary>
/// Denna metod används av myValueMain som frågar vilken av metoderna myValues som
/// kan ta emot bara 3 parameters vilket denna gör.
/// </summary>
/// <param name="value1">parameter 1</param>
/// <param name="value2">parameter 2</param>
/// <param name="value3">parameter 3</param>
/// <returns>Returnerar vilken metid som användes och summan av värde 1, 2 och 3</returns>
private string myValues(int value1, int value2, int value3)
{
int returnvalue = Convert.ToInt32(value1 + value2 + value3);
return Convert.ToString("Metod med 3 värden anropades.\nSumman av " + value1 + "+" + value2 + "+" + value3 + "=" + returnvalue);
}

/// <summary>
/// Denna metod används av myValueMain som frågar vilken av metoderna myValues som
/// kan ta emot bara 4 parameters vilket denna gör.
/// </summary>
/// <param name="value1">parameter 1</param>
/// <param name="value2">parameter 2</param>
/// <param name="value3">parameter 3</param>
/// <param name="value4">parameter 4</param>
/// <returns>Returnerar vilken metid som användes och summan av värde 1, 2, 3 och 4</returns>
private string myValues(int value1, int value2, int value3, int value4)
{
int returnvalue = Convert.ToInt32(value1 + value2 + value3 + value4);
return Convert.ToString("Metod med 4 värden anropades.\nSumman av " + value1 + "+" + value2 + "+" + value3 + "+" + value4 + "=" + returnvalue);
}

ForEach-Loop med förnamn

Uppgiften:

Skriv ett program som från konsolen möjliggör input av x antal förnamn som är mellanslagsseparerade.
Skriv sedan ut dem + deras ordnings siffra med hjälpa av en foreach-loop.
Ex: Olle Kalle Pelle
1: Olle
2: Kalle
3: Pelle


Program.cs

Console.Write("Ange ett par förnamn och separera dessa med ett space: ");
string input = Convert.ToString(Console.ReadLine());
Console.WriteLine("Orginal inmatade värden:\n{0}\n", input);
string output = FredrikBLL.BLL.Functions.ForEachLoopMyNames(input);

Console.WriteLine("Resultatet:\n" + Convert.ToString(output));
Console.ReadLine();


Functions.cs

/// <summary>
/// Användaren matar in ex. förnamn med spaceseparationer.
/// </summary>
/// <param name="input">Förnamn med spaceseparation</param>
/// <returns>Returnerar varje namn med ordningssiffra före.</returns>
public static string ForEachLoopMyNames(string input)
{
int i = 0;
string output = "";
string[] values = input.Split(new char[] { ' ' });


foreach (string value in values)
{
output += i + " : " + value + "\n";
i++;
}

return output;
}


Mitt resultat:

Ange ett par förnamn och separera dessa med ett space: Olle Kalle Bosse Pelle Toker
Orginal inmatade värden:
Olle Kalle Bosse Pelle Toker

Resultatet:
0 : Olle
1 : Kalle
2 : Bosse
3 : Pelle
4 : Toker


My calculator is looping

Det är precis vad den gör så här tidigt på morron.
Fortsätter med loopar idag också vilket för framtidens arbete kommer att ha en himla massa loopar i sig.

Det jag skall göra nu är följande:

Skriv ett program som från konsolen möjliggör input av 3 numeriska värden och en operator.
De 2 första värdena skall ex. summeras, subtraheras.. beroende på inskickad operator.
3:e värdet skall ange hur många gånger programmet skall loopa.
Ex. värde1=2 värde2=5 värde3=4 operator=+
2+5=7
2+5=7
2+5=7
2+5=7

Min kod vart följande:

Program.cs

int value1, value2, loopvalue;
string result, CalcThis;

Console.WriteLine("Vänligen ange 2 tal som du vill räkna ut.");
Console.Write("Tal 1: ");
value1 = Convert.ToInt32(Console.ReadLine());
Console.Write("Tal 2: ");
value2 = Convert.ToInt32(Console.ReadLine());
Console.Write("Hur många gånger vill du loopa uträkningen? ");
loopvalue = Convert.ToInt32(Console.ReadLine());
Console.Write("vad för räknesätt? (+, - , * eller /) :");
CalcThis = Console.ReadLine();
result = FredrikBLL.BLL.Functions.LoopMyCalculator(value1, value2, loopvalue, CalcThis);

Console.WriteLine("Resultatet finner du nedan :");
Console.WriteLine(result);
Console.ReadLine();


Functions.cs

/// <summary>
/// Räknar ut värde 1 och 2 med hjälp av en operator och ett värde om hur många gånger programmet skall loopa.
/// </summary>
/// <param name="value1">Tal1</param>
/// <param name="value2">Tal2</param>
/// <param name="loopvalue">Ange hur många gånger programmet skall loopa</param>
/// <param name="CalcThis">Operatorn: +,-,* eller /</param>
/// <returns>Returnerar värdet från tal 1 (operator) tal 2 = svaret och loppar svaret antal gånger man anger det.</returns>
public static string LoopMyCalculator(int value1, int value2, int loopvalue, string CalcThis)
{
string result = "";
int i = 0;

while (i < loopvalue)                                   // Kontrollerar om i = antalet loopar man vill göra
{
if (CalcThis == "+")
result += value1 +  "+ " + value2 + " = " + Convert.ToString(value1 + value2) + "\n";
else if (CalcThis == "-")
result += value1 + " - " + value2 + " = " + Convert.ToString(value1 - value2) + "\n";
else if (CalcThis == "*")
result += value1 + " * " + value2 + " = " + Convert.ToString(value1 * value2) + "\n";
else if (CalcThis == "/")
result += value1 + " / " + value2 + " = " + Convert.ToString(value1 / value2) + "\n";
else
throw new ApplicationException("Fel värde");

i++;

}
return result; // returnerar resultatet.



Exempel:

Vänligen ange 2 tal som du vill räkna ut.
Tal 1: 5
Tal 2: 5
Hur många gånger vill du loopa uträkningen? 10
vad för räknesätt? (+, - , * eller /) :*

Resultatet finner du nedan :
5 * 5 = 25
5 * 5 = 25
5 * 5 = 25
5 * 5 = 25
5 * 5 = 25
5 * 5 = 25
5 * 5 = 25
5 * 5 = 25
5 * 5 = 25
5 * 5 = 25


En riktigt bra början på min dag, helt klart!

EDIT:

Insåg att jag hade ett litet fel gällande utärkningen för dividera.
Eftersom svaret inte alltid är heltal där även om input är det så blir svaret 0 om man använder den som int.
Dvs, jag måste antingen hantera alla tal som decimaler vilket jag nog inte just nu tänker göra utan görom det enbart för just dividera..

Gör en liten ändring i Functions.cs som resulterar till detta:

public static string LoopMyCalculator(int value1, int value2, int loopvalue, string CalcThis)
{
string result = "";
decimal tempresult;
int i = 0;

while (i < loopvalue)                                   // Kontrollerar om i = antalet loopar man vill göra
{
if (CalcThis == "+")
{
tempresult = value1 + value2;
result += value1 +  "+ " + value2 + " = " + Convert.ToString(tempresult) + "\n";
}

else if (CalcThis == "-")
{
tempresult = value1 - value2;
result += value1 + " - " + value2 + " = " + Convert.ToString(tempresult) + "\n";
}

else if (CalcThis == "*")
{
tempresult = value1 * value2;
result += value1 + " * " + value2 + " = " + Convert.ToString(tempresult) + "\n";
}

else if (CalcThis == "/")
{
tempresult = (decimal)value1 / (decimal)value2;
result += value1 + " / " + value2 + " = " + Convert.ToString(tempresult) + "\n";
}

else
throw new ApplicationException("Fel värde");

i++;

}
return result; // returnerar resultatet.

Jag orkar inte snurra mer nu

Fortfarande en himla massa loopar.
Denna gången så är det en foreach-loop med en break funktion.

Lyckades lösa det på ett bra sätt tycker jag?

Använd tidigare program, skriv bara ut värden fram till du stöter på siffran 5.
Kommer siffran 5 upp skriv ut värden fram till dess och sedan lägg till "Jag orkar inte snurra mer nu!"

Tar resultatet först....

Ange ett antal siffror, separera med komma tecken!: 9,8,7,6,5,4,3,2,1
Orginal inmatade värden: 9,8,7,6,5,4,3,2,1
Resultatet:

9
8
7
6
Jag orkar inte snurra mera nu!



Program.cs

onsole.Write("Ange ett antal siffror, separera med komma tecken!: ");
string input = Convert.ToString(Console.ReadLine());
Console.WriteLine("Orginal inmatade värden: " + input);
string output = FredrikBLL.BLL.Functions.myForEachLoop3(input);

Console.WriteLine("Resultatet:\n" + Convert.ToString(output));
Console.ReadLine();



Functions.cs

public static string myForEachLoop3(string input)
{
string output = "";
string[] values = input.Split(new char[] { ',' });

foreach (string value in values)
{
if (value == "5")
{
output += "\n" + "Jag orkar inte snurra mera nu!";
break;
}
output += "\n" + value;

}


return output;
}




foreach-loop med continue funktion?!

Från min tidigare uppgift att skapa en foreach-loop och fixa till kommaseparerade värden skall jag nu göra följande.
Använd tidigare övning men returnera enbart de jämna kommaseparerade värden.
(Använd nyckelordet continue)


Jag har ett exempel på hur det kan se ut med att köra int hela vägen och ange då fasta "inmatade" värden:

public class Program
{
public static void Main(string [] args)
{
// Data värde
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

// numQuery är en IEnumerable<int>
var numQuery =
from num in numbers
where (num % 2) == 0
select num;

// skriv ut värdena med en foreach loop.
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}
}
}

Nu skall jag bara försöka få detta till verklighet med egna inmatade värden och även kunna använda stings.

Edit:
Efter att insätt att IEnum är lite overkill och insätt att jag stirrat mig blind så behövde jag lite tips.
Nu hitta jag en lösning som är mer än förstående dessutom :-)

Program.cs

namespace FredrikUIL
{
public class Program
{
public static void Main(string[] args)
{

Console.Write("Ange ett antal siffror, separera med komma tecken!: ");
string input = Convert.ToString(Console.ReadLine());
Console.WriteLine("Orginal inmatade värden:\n{0}\n", input);
string output = FredrikBLL.BLL.Functions.myForEachLoop2(input);

Console.WriteLine("Resultatet:\n" + Convert.ToString(output));
Console.ReadLine();

}
}
}


Functions.cs

public static string myForEachLoop2(string input)
{
string output = "";
string[] values = input.Split(new char[] { ',' });


foreach (string value in values)
{
if (Convert.ToInt32(value) % 2 == 0)    //true så går den till continue (svaret blir 0), false så räknar den vidare!
output += "\n" + value;
else
continue;  // Hoppar till nästa post i values då value ej är delbart med 2 dvs 0.
}

return output;  // returnerar värdet tillbaka till program.cs
}


Tips på C# Video Turtorials för nybörjare

Gokväll på er,

Är det någon där ute som möjligen har tips på bra C# / VS2010 turtorials för nybörjare?
Jag har hittat den här sidan av Quack.Ware.com.
Har inte kollat så noga på den än men den fungerar säkerligen.

Såg en video av han där har visar lite hur arrays fungerar vilket är väldigt intressant.

Skall ta och kolla vidare på detta nu så får vi se vad man lär sig.
Får börja med Hello World och helt enkelt gå vidare!

Ett slut och en ny början

Det är väll en riktigt fin öppning?
Från och med 1a November slutar jag med det jag sysslat med i störren delen av mitt liv.
Jag kommer då sluta som IT-Tekniker och istället utvecklas som bara den till nått helt nytt. Det är så pass nytt för mig så jag är någonstans mellan det Gula och Röda.
Nog har jag sysslat lite med "utveckling" tidigare, dock inte på riktigt som jag skulle kalla det för.
Har nog pysslat en del med PHP/MySQL, Javascript men det är på försöka skapa lite egen kod eller granska annans kod.
Har pysslat en del med scripting i linux som sh script av olika slag, men det är just så långt ifrån det här nya jag kan komma.

Som ni förstår på namnet av bloggen, C Sharp så är det precis det som kommer att slita mina stackars få hjärnceller som finns kvar där uppe och det är där jag kommer att börja utvecklas.

Nu vet jag inte alls om jag kommer att ha tid alls till att skriva nått om det jag skall försöka lära mig här men skall försöka dela med mig av min syn.
Jag gillar teknik, lite nördig så där och gillar att pröva på nya saker.
Har även tänk väldigt länge och drömt om att få just börja programmera, utveckla och utvecklas som ajg så fint vill kalla det. Och gissa vad? NU skall jag äntligen göra det, har sagt till mig själv 10-tusentals gånger nu att klart som f-n att du skall klara det här.

Man kan inte lära gamla hundar sitta....

Finns det ett ordspråk som säger.
Men jag skall nog visa er, gå från den röda zonen genom den gula och in i den gröna.
Om ett år, då vet vi.

RSS 2.0