Software

Introduction to AI on Microsoft Azure 853 480 mezo

Introduction to AI on Microsoft Azure

Hello my dear padawans I would like to write some notes about AI for everyone, I am preparing for Microsoft AI Engineer certification exams and I will put my notes here as much as possible 🙂

What is AI? AI is a powerful tool, paving the way for innovative software that enhances health care, assists individuals with physical limitations, fortifies smart infrastructure, delivers captivating entertainment experiences, and contributes to environmental conservation.

Exploring AI

AI is characterized by its ability to mimic human behaviors and skills. It encompasses:

  • Machine Learning: The cornerstone of AI, enabling computers to learn from data and make informed predictions.
  • Computer Vision: Allows AI to interpret visual information from images and videos.
  • Natural Language Processing: Enables computers to understand and respond to human language.
  • Document Intelligence: Manages and processes vast amounts of data in documents efficiently.
  • Knowledge Mining: Extracts valuable information from unstructured data sources.
  • Generative AI: Creates original content ranging from text to images.

Diving Deep into Machine Learning

Machine learning stands as the bedrock of many AI applications. Since its inception in the 1950s, it has been a focal point for data scientists globally. This branch of AI intertwines computer science with mathematics.

Consider sustainable farming – an area where machine learning proves instrumental. Companies like The Yield leverage sensors, data analytics, and machine learning algorithms to provide farmers with actionable insights on weather patterns, soil quality, and plant health.

Unraveling Machine Learning Mechanisms

In today’s digital age, we are inundated with a plethora of data daily. Machine learning algorithms sift through this extensive dataset – including social media posts, emails, photographs – discerning patterns and relationships that inform decision-making processes.

For instance in environmental conservation efforts; machine learning models analyze complex datasets identifying correlations between various elements. These insights are pivotal for developing strategies aimed at preserving our planet’s biodiversity while promoting sustainable practices.

Unleashing the Power of AI: A Deep Dive into Machine Learning and Computer Vision

In the ever-evolving field of Artificial Intelligence (AI), a team of dedicated botanists and scientists are making remarkable strides in understanding wildflower species. Armed with labeled data meticulously collected from wildflower samples, these professionals employ sophisticated algorithms to unveil intricate relationships between various features and species.

The Journey from Data Collection to Model Creation

The process begins in the heart of nature, where every sample is labeled with precision, ensuring accuracy in data collection. This labeled data then undergoes rigorous processing through an algorithm designed to uncover hidden patterns and relationships. The culmination of this process is a comprehensive model that encapsulates these findings.

As AI continues its upward trajectory, new samples discovered by volunteers can now be easily identified by this model, marking a significant milestone in AI’s capabilities.

Microsoft Azure: Your Companion in Machine Learning

Machine learning has found a formidable ally in Microsoft Azure. With its Azure Machine Learning service, users are endowed with a cloud-based platform tailored for creating, managing, and publishing machine learning models with ease.

Azure Machine Learning Studio stands out with its diverse authoring experiences including Automated machine learning for quick model creation; Azure Machine Learning designer for no-code solution development; Data metric visualization for experiment analysis; and Notebooks for personalized code writing on integrated Jupyter Notebook servers.

A Glimpse into the World of Computer Vision

Venturing into the realm of computer vision unveils possibilities that were once considered beyond reach. The Seeing AI app exemplifies computer vision’s prowess. Crafted for individuals with blindness or low vision, this app employs AI to narrate the visual world around them – an innovation transforming lives.

For an immersive experience on Seeing AI’s capabilities watch this video or explore more on the Seeing AI web page.

In Conclusion

AI’s journey from collecting wildflower samples to identifying species labels using complex models underscores its phenomenal growth. With platforms like Microsoft Azure enhancing machine learning and innovations like Seeing AI illuminating paths in computer vision, we are indeed witnessing a renaissance in artificial intelligence!

TaskDescription
Image classificationAn image of a taxi with the label "Taxi".
Image classification involves training a machine learning model to classify images based on their contents. For example, in a traffic monitoring solution you might use an image classification model to classify images based on the type of vehicle they contain, such as taxis, buses, cyclists, and so on.
Object detectionAn image of a street with buses, cars, and cyclists identified and highlighted with a bounding box.
Object detection machine learning models are trained to classify individual objects within an image, and identify their location with a bounding box. For example, a traffic monitoring solution might use object detection to identify the location of different classes of vehicle.
Semantic segmentationAn image of a street with the pixels belonging to buses, cars, and cyclists identified.
Semantic segmentation is an advanced machine learning technique in which individual pixels in the image are classified according to the object to which they belong. For example, a traffic monitoring solution might overlay traffic images with “mask” layers to highlight different vehicles using specific colors.
Image analysisAn image of a person with a dog on a street and the caption "A person with a dog on a street".
You can create solutions that combine machine learning models with advanced image analysis techniques to extract information from images, including “tags” that could help catalog the image or even descriptive captions that summarize the scene shown in the image.
Face detection, analysis, and recognitionAn image of multiple people on a city street with their faces highlighted.
Face detection is a specialized form of object detection that locates human faces in an image. This can be combined with classification and facial geometry analysis techniques to recognize individuals based on their facial features.
Optical character recognition (OCR)An image of a building with the sign "Toronto Dominion Bank", which is highlighted.
Optical character recognition is a technique used to detect and read text in images. You can use OCR to read text in photographs (for example, road signs or store fronts) or to extract information from scanned documents such as letters, invoices, or forms.

Understand natural language processing

Natural language processing (NLP) is a subfield of artificial intelligence that deals with the interaction between computers and humans in natural language. It involves processing natural language datasets, such as text corpora or speech corpora, using either rule-based or probabilistic (i.e. statistical and, most recently, neural network-based) machine learning approaches. The goal is a computer capable of “understanding” the contents of documents, including the contextual nuances of the language within them. The technology can then accurately extract information and insights contained in the documents as well as categorize and organize the documents themselves.

NLP has a wide range of applications, including:

  • Sentiment Analysis: Identifying the sentiment of a piece of text, such as whether it is positive, negative, or neutral.
  • Named Entity Recognition: Identifying and categorizing named entities in text, such as people, organizations, and locations.
  • Machine Translation: Automatically translating text from one language to another.
  • Question Answering: Automatically answering questions posed in natural language.
  • Chatbots: Interacting with users in natural language to answer questions or perform tasks.

NLP is a rapidly evolving field, with new techniques and models being developed all the time. Some of the most recent advances include:

  • Pre-trained Language Models: Large neural network models that are trained on massive amounts of text data, allowing them to perform a wide range of NLP tasks with high accuracy.
  • Transformers: A type of neural network architecture that has revolutionized NLP by allowing models to process entire sequences of text at once, rather than one word at a time.
  • Zero-shot Learning: A technique that allows models to perform NLP tasks in languages they have never seen before, by leveraging their knowledge of related languages.

NLP is a powerful tool that has the potential to transform the way we interact with computers and with each other. As the field continues to evolve, we can expect to see even more exciting applications of this technology in the years to come.

Document intelligence

Document Intelligence is a subfield of AI that focuses on managing, processing, and utilizing large volumes of data found in forms and documents. It enables the creation of software that can automate processing for contracts, health documents, financial forms, and more. This technology can extract valuable information from unstructured data sources, categorize and organize documents, and efficiently manage high volumes of data. Knowledge Mining is another area of AI that deals with extracting information from large volumes of often unstructured data to create a searchable knowledge store. It is a powerful tool that can help organizations extract valuable insights from their data and make informed decisions. Together, Document Intelligence and Knowledge Mining are transforming the way businesses manage and process data, enabling them to work more efficiently and effectively.

Generative AI

Generative AI is a subfield of artificial intelligence that deals with creating original content. It is often used in chat applications, where it takes in natural language input and returns appropriate responses in a variety of formats, including natural language, image, code, and audio. Generative AI models learn the patterns and structure of their input training data and then generate new data that has similar characteristics. This technology has a wide range of applications, including art, writing, script writing, software development, product design, healthcare, finance, gaming, marketing, and fashion. With the advent of large neural network models and transformer-based deep neural networks, generative AI has become more powerful and capable of performing a wide range of tasks with high accuracy.

Responsible AI 

Responsible AI is an approach to developing, assessing, and deploying AI systems in a safe, trustworthy, and ethical way. It emphasizes accountability, fairness, and inclusivity. The goal is to ensure that AI is created and applied in an ethical way that benefits everyone, while minimizing the potential for artificial intelligence to cause harm. Responsible AI practices aim to mitigate bias, ensure privacy, and prioritize the well-being of all users. Microsoft Azure provides a suite of tools to help you create a customized, end-to-end responsible AI experience, including the Responsible AI Dashboard, which offers a range of tools to help you operationalize responsible AI practices for your organization or business. As the field of AI continues to evolve, responsible AI practices will play an increasingly important role in ensuring that AI is developed and deployed in a way that benefits society as a whole.

At Microsoft, AI software development is guided by a set of six principles, designed to ensure that AI applications provide amazing solutions to difficult problems without any unintended negative consequences.

  • Fairness
  • Reliability and safety
  • Privacy and security
  • Inclusiveness
  • Transparency
  • Accountability

I hope that is helpful

May the knowledge be with you

Components on Blazor 1024 557 mezo

Components on Blazor

Hi my fellow Padawans

Blazor is a frontend framework like Angular or React but mostly like React and it has components for create pages and reusable objects functionalities.

But how can we create a component and use it on the pages in our Blazor application?

First Read this Article and create your first Blazor application 🙂

Then on your Solution Explorer find Pages and right click on it and Add -> Razor Component

On Add New Item windows write your components name and create it

I decided to make something different and I created Todo.Razor file and I add these codes on the page

@page "/todo"
@using BlazorApp1.Data;

<h3>Todo</h3>

<ul>
    @foreach (var todo in todos)
    {
            <li>@todo.Title</li>
    }
</ul>

<input placeholder="Something todo" @bind="newTodo" />
<button @onclick="AddTodo">Add todo</button>

@code {
    private List<TodoItem> todos = new();
    private string? newTodo;

    private void AddTodo()
    {
        if (!string.IsNullOrWhiteSpace(newTodo))
        {
            todos.Add(new TodoItem { Title = newTodo });
            newTodo = string.Empty;
        }
    }
}

And find NavMenu.razor file inside of the Shared folder on your Solution Explorer. Find the last item of menu divs and Add this code:

  <div class="nav-item px-3">
            <NavLink class="nav-link" href="todo">
                <span class="oi oi-list-rich" aria-hidden="true"></span> Todo
            </NavLink>
        </div>

You will have a NavMenu.Razor page like this:

<div class="top-row ps-3 navbar navbar-dark">
    <div class="container-fluid">
        <a class="navbar-brand" href="">BlazorApp1</a>
        <button title="Navigation menu" class="navbar-toggler" @onclick="ToggleNavMenu">
            <span class="navbar-toggler-icon"></span>
        </button>
    </div>
</div>

<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
    <nav class="flex-column">
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="" Match="NavLinkMatch.All">
                <span class="oi oi-home" aria-hidden="true"></span> Home
            </NavLink>
        </div>
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="counter">
                <span class="oi oi-plus" aria-hidden="true"></span> Counter
            </NavLink>
        </div>
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="fetchdata">
                <span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
            </NavLink>
        </div>
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="todo">
                <span class="oi oi-list-rich" aria-hidden="true"></span> Todo
            </NavLink>
        </div>
    </nav>
</div>

@code {
    private bool collapseNavMenu = true;

    private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null;

    private void ToggleNavMenu()
    {
        collapseNavMenu = !collapseNavMenu;
    }
}

When you open the webpage you will see the Todo on your left navigation menu and then you will see your amazing Todo application like below:

If you want to use this component in other pages for example add this component on the home page. Go to your Index.Razor inside of the Pages folder and add this code :

<Todo/>

Your index.Razor will look like this

@page "/"

<PageTitle>Index</PageTitle>

<h1>Hello, Everyone!</h1>

Welcome to your new app. Hello 

<SurveyPrompt Title="How is Blazor working for you?" />




<Todo/>

Then we RUN our app oooorrr we can Hot Reload and we will see the result like below:

That is easy isn’t it ?

I hope that is helpful

May the knowledge be with you

Create Your First Blazor Application 1024 557 mezo

Create Your First Blazor Application

Hello My Fellow Padawans 🙂

Today I will tell you about a new Frontend Technology called “Blazor”. It sounds similar from somewhere… Yes Razor and yes its a Microsoft technology.

Ok but lets remember what is RAZOR first: Razor is a format for generating text-based content, like HTML. Razor files have cshtml or a razor file extension, and contain a mix of C# code along with HTML.

What is Blazor

Blazor is a user-interface framework built on .NET and Razor. Blazor applications can run on a server as part of an ASP.NET application or can be deployed to run in the browser on a user’s machine similar to a single-page application. It comes with 2 different app styles.

Blazor Server: is an implementation of the Blazor user-interface framework as part of the ASP.NET Core web development framework, deployed to a web server. Developing an application with Blazor Server generates HTML on a web server as it is requested by web site visitors, typically using a web browser. That HTML is then delivered to the visitor’s browser, and a two-way communication pipeline is maintained using ASP.NET Core SignalR and preferring a Web Sockets connection.

Users that click buttons, navigate, and perform other interactions with a Blazor Server application have their actions transmitted on this SignalR connection, and the server responds with user-interface updates using the same connection. The Blazor Server framework automatically updates the browser with the content generated on the web server.

Blazor WebAssembly: Shortened to Blazor WASM, is an implementation of the Blazor user-interface framework that runs on the HTML 5 standard WebAssembly runtime present in all modern browsers. The binary output of your application, the DLL files, are transmitted to the browser and run with a version of .NET that has been optimized to work with the WebAssembly runtime regardless of the underlying operating system of the device browsing to the website.

Since WebAssembly is a technology that runs entirely in the browser, it’s possible to deploy this model of the Blazor application using files that a web server doesn’t parse or interact with. This type of “static” approach reduces the requirements for a web server and shifts all processing for the application to the user’s machine.

Advanced processing and logic can take place in the browser. When the application needs data or to interact with other services, it can use standard web technologies to communicate with HTTP services.

How to build an application with Blazor

Start your Visual Studio 2022

Then create Blazor Server App and in the Configure your new project window, enter BlazorApp as the project name and select Next.

In the Additional information window, select .NET 7.0 (Standard Term Support) in the Framework drop-down if not already selected and click the Create button.

Your project is created and loaded in Visual Studio. Take a look at the contents of your project using Solution Explorer.

Several files were created to give you a simple Blazor app that is ready to run.

  • Program.cs is the entry point for the app that starts the server and where you configure the app services and middleware.
  • App.razor is the root component of the app.
  • The Pages directory contains some example web pages for the app.
  • BlazorApp.csproj defines the app project and its dependencies and can be viewed by double-clicking the BlazorApp project node in the Solution Explorer.
  • The launchSettings.json file inside the Properties directory defines different profile settings for the local development environment. A port number is automatically assigned at project creation and saved on this file.

To run your application basically click the Run button.

When you made some changes and you want to see your changes on the browser you need to click the Hot Reload button

If you want to make “Hot Reload” every time you save your changes then you need to click the menu button next to “Hot Reload” and select “Hot Reload on File Save” Then VS will watch your file save and refresh your web app on the browser to show your changes.

After you run your app you will see the default app of the Blazor.

Congrats you made your first Blazor App and make it run!

Last thing I want to show is how Blazor files and pages look like

_Host.cshtml This holds our application and renders page components.

@page "/"
@namespace BlazorApp1.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
    Layout = "_Layout";
}

<component type="typeof(App)" render-mode="ServerPrerendered" />

Index.razor : This is the Home page that you see on the screenshot below.

@page "/"

<PageTitle>Index</PageTitle>

<h1>Hello, Everyone!</h1>

Welcome to your new app. Hello 

<SurveyPrompt Title="How is Blazor working for you?" />

Counter.razor and this is the counter component as a page. It’s easy to render and reuse.

@page "/counter"

<PageTitle>Counter</PageTitle>

<h1>Counter</h1>

<p role="status">Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }
}

Congrats 🙂 you open the new Blazor App and make that work

I will keep continuing to write about it coz I probably will use it for my company.

I hope that is helpful

May the knowledge be with you

Binary representation of floating-point numbers 1024 420 mezo

Binary representation of floating-point numbers

Have you ever considered the process by which computers store floating-point numbers such as 3.1416 (𝝿) or 9.109 × 10⁻³¹ (the mass of the electron in kg) in the memory which is limited by a finite number of ones and zeroes (aka bits)?

For integers (i.e., 17). It appears to be fairly straightforward. Assume we have 16 bits (2 bytes) to store the number. We can store integers between 0 and 65535 in 16 bits:

(0000000000000000)₂ = (0)₁₀

(0000000000010001)₂ =
    (1 × 2⁴) +
    (0 × 2³) +
    (0 × 2²) +
    (0 × 2¹) +
    (1 × 2⁰) = (17)₁₀

(1111111111111111)₂ =
    (1 × 2¹⁵) +
    (1 × 2¹⁴) +
    (1 × 2¹³) +
    (1 × 2¹²) +
    (1 × 2¹¹) +
    (1 × 2¹⁰) +
    (1 × 2⁹) +
    (1 × 2⁸) +
    (1 × 2⁷) +
    (1 × 2⁶) +
    (1 × 2⁵) +
    (1 × 2⁴) +
    (1 × 2³) +
    (1 × 2²) +
    (1 × 2¹) +
    (1 × 2⁰) = (65535)₁₀

On the off chance that we really want a marked number we might utilize two’s supplement and shift the scope of [0, 65535] towards the negative numbers. For this situation, our 16 pieces would address the numbers in a scope of [-32768, +32767].

As you would have seen, this approach will not permit you to address the numbers like – 27.15625 (numbers after the decimal point are simply being disregarded).

However, we’re not the initial ones who have seen this issue. Around ≈36 years ago a few brilliant people conquered this limit by presenting the IEEE 754 norm for floating-point arithmetic.

The IEEE 754 standard portrays the way (the framework) of utilizing those 16 bits (or 32, or 64 bits) to store the numbers of wider range, including the small floating numbers (smaller than 1 and closer to 0).

To get the thought behind the standard we could review the logical documentation – an approach to communicating numbers that are excessively huge or excessively little (for the most part would bring about a long string of digits) to be helpfully written in decimal structure.

As you might see from the picture, the number portrayal may be parted into three sections:

sign
division (otherwise known as significant) – the important digits (the significance, the payload) of the number
example – controls how far and in which direction to move the decimal point in the fraction
The base part we might preclude simply by settling on what it will be equivalent to. For our situation, we’ll involve 2 as a base.

Rather than utilizing every one of the 16 bits (or 32 bits, or 64 bits) to store the fraction of the number, we might share the bits and store a sign, type, and portion simultaneously. Contingent upon the numbers of bits that we will use to store the number we end up with the accompanying parts:

Floating-point formatTotal bitsSign bitsExponent bitsFraction bitsBase
Half-precision1615102
Single-precision3218232
Double-precision64111522

With this approach, the number of bits for the fraction has been reduced (i.e. for the 16-bits number it was reduced from 16 bits to 10 bits). It means that the fraction might take a narrower range of values now (losing some precision). However, since we also have an exponent part, it will actually increase the ultimate number range and also allow us to describe the numbers between 0 and 1 (if the exponent is negative).

For example, a signed 32-bit integer variable has a maximum value of 2³¹ − 1 = 2,147,483,647, whereas an IEEE 754 32-bit base-2 floating-point variable has a maximum value of ≈ 3.4028235 × 10³⁸.

To make it possible to have a negative exponent, the IEEE 754 standard uses the biased exponent. The idea is simple – subtract the bias from the exponent value to make it negative. For example, if the exponent has 5 bits, it might take the values from the range of [0, 31] (all values are positive here). But if we subtract the value of 15 from it, the range will be [-15, 16]. The number 15 is called bias, and it is being calculated by the following formula:

exponent_bias = 2 ^ (k−1) − 1

k - number of exponent bits

I’ve tried to describe the logic behind the converting of floating-point numbers from a binary format back to the decimal format on the image below. Hopefully, it will give you a better understanding of how the IEEE 754 standard works. The 16-bits number is being used here for simplicity, but the same approach works for 32-bits and 64-bits numbers as well.

Checkout the interactive version of this diagram to play around with setting bits on and off, and seeing how it would influence the final result

Here is the number ranges that different floating-point formats support:

Floating-point formatExp minExp maxRangeMin positive
Half-precision−14+15±65,5046.10 × 10⁻⁵
Single-precision−126+127±3.4028235 × 10³⁸1.18 × 10⁻³⁸

Be aware that this is by no means a complete and sufficient overview of the IEEE 754 standard. It is rather a simplified and basic overview. Several corner cases were omitted in the examples above for simplicity of presentation (i.e. -0-∞+∞ and NaN (not a number) values)

Code examples

In the javascript-algorithms repository, I’ve added a source code of binary-to-decimal converters that were used in the interactive example above.

Below you may find an example of how to get the binary representation of the floating-point numbers in JavaScript. JavaScript is a pretty high-level language, and the example might be too verbose and not as straightforward as in lower-level languages, but still it is something you may experiment with directly in the browser:

See the Pen bitsToFloat.js by mzekiosmancik (@mzekiosmancik) on CodePen.

References

You might also want to check out the following resources to get a deeper understanding of the binary representation of floating-point numbers:

Create a React Native Web, Android, and IOS project with Expo CLI 1024 635 mezo

Create a React Native Web, Android, and IOS project with Expo CLI

Hello fellow programmer padawans

As you can understand from the title I will tell you how to create a web, Android, and IOS project with React Native and Expo. First, we need the Expo CLI package.

What’s Expo CLI?

Expo CLI is the npm package that creates a project that we can test on our devices. We won’t need to write codes on Xcode or Android Studio. We only need Visual Studio Code and we can write codes for 3 different environments.

First things first, we need NodeJs installed on our computer if you don’t have it you can download it here: https://nodejs.org/en/.

Install Expo and Create Project

To install the Expo CLI you need to open Node.js Command Prompt and run this code

npm install -g expo-cli

To create the project run this code below

expo init ProjectName

Template Selection

As soon as you make the code creation command run, you will see the selection menu as shown below. We need to select a template depending on our needs. I prefer to select a TABS template, it’s a TypeScript and a very good sample to learn and to see the structure of the project.

Start your project and see your app on your device

After the project creation is over we need to go inside the project folder from Nodejs Command Prompt to start your project.

expo start

Then we can see a website and a barcode on the command prompt, that barcode is the magic. I will show you…

After you see all these screens you now are ready to test your app on your device. Download the Expo app from the Apple App Store or Google Play and create an account.

Open your Camera and read the barcode. It will then ask you to open in the Expo app, do it and Voila! Your app is working on your phone or tablet.

First, open the project folder with Visual Studio Code so you can checkout the folder and file structure. Then you can find the Screens folder and make some changes on the TabScreenOne.tsx or TabScreenTwo.tsx files and you will see your app is changing on your device as well.

That’s all for now! I will write about components on React Native on my next post.

Thanks for reading

May the force be with you. 

Expo ile React Native Web, IOS ve Android Projesi Oluşturmak 1024 635 mezo

Expo ile React Native Web, IOS ve Android Projesi Oluşturmak

Selamlar sevgili programcı padavanlar

Başlıktan da anladığınız gibi bu makalemde sizlere nasıl React Native ile hem web hem android hem de IOS projesi oluşturabiliriz sorusunun cevabını anlatacağım. İlk olarak Expo CLI paketini yükleyerek başlıyoruz.

Expo CLI paketi ile oluşturduğumuz projemiz için XCode yada Android Studio gibi ek IDE yazılımlarına ihtiyaç kalmadan tek seferde 3 platform için yazılım geliştirebilmemizi sağlıyor.

Expo ile proje geliştirebilmek için öncelikle NodeJS e ihtiyacımız var. Eğer bilgisayarınız da NodeJS yoksa şuradan https://nodejs.org/en/ indirebilirsiniz.

NodeJS i kurduk şimdi sıra Expo CLI paketinde.

Expo Kurulumu ve Proje Oluşturma

ExpoCLI kurmak için Node.js command promptu bulup çalıştırın ve aşağıdaki komut satırını çalıştırın.

npm install -g expo-cli

Projeyi Oluşturmak için ise :

expo init ProjeAdı

Template Seçimi

Komut satırı çalışır çalışmaz aşağıdaki template seçim ekranı bizi karşılıyor. Buradan projenize uygun olan şablonu seçebilirsiniz ben TABS template ini seçiyorum. TABS ile gelen proje içerisinde çalışan bir sekme örneği var React Native i çok iyi anlayabileceğiniz güzel bir örnek olduğunu düşünüyorum.

Sonrasında yine Node.js command prompt üzerinden oluşturduğumuz klasörün içine giderek projemizi çalıştırıyoruz.

expo start

Proje çalışırken hem command prompt üzerinde hemde açılan localhost web sitesi üzerinde bir kare barcod çıkıyor bu barcod ne işe yarıyor birazdan anlatacağım…

Nodejs Command Prompt

Web Expo Proje Sayfası 

Projemizi Cihazlarda Çalıştırmak

Ardından elinizdeki cihaz üzerinde Google Play yada Apple App Store üzerinden Expo uygulamasını indirerek bir hesap oluşturun ardından projenizi eklemek için bir barkod isteyecek işte şimdi yukarda çıkan barkodların bir anlamı oldu. Cihazınızın kamerası ile barkodu okutun ve oluşturduğunuz uygulamanız telefonunuzda çalışmaya başlasın.

Başlangıç olarak projenizi Visual Studio Code üzerinde açıp Screens klasörü içindeki TabOneScreen.tsx , TabTwoScreen.tsx dosyalarını biraz değiştirerek uygulamanızı biraz değiştirebilirsiniz.

Şimdilik bu kadar bir sonraki yazıda sizlere React Native üzerinde component yapısını anlatacağım.

Okuduğunuz için teşekkürler

Bilgiyle Kalın…

Levenshtein Distance Algorithm 1024 668 mezo

Levenshtein Distance Algorithm

Hello my fellow Padawans 

Couple days ago I had to use an algorithm for comparing string and I want to write something about Levenshtein Algorithm. This algorithm is for measure the metric distance between 2 string text. Informally, the Levenshtein distance between two words is the minimum number of single-character edits (insertions, deletions or substitutions) required to change one word into the other. It is named after the Soviet mathematician Vladimir Levenshtein, who considered this distance in 1965.

Mathematically, the Levenshtein distance between two strings a, b (of length |a| and |b| respectively) is given by leva,b(|a|,|b|)

where 1(ai≠bi) is the indicator function equal to 0 when ai≠bi and equal to 1 otherwise, and leva, b(i,j) is the distance between the first i characters of a and the first j characters of b.

Note that the first element in the minimum corresponds to deletion (from a to b), the second to insertion and the third to match or mismatch, depending on whether the respective symbols are the same.

We can use this algorithm for string matching and spell checking

This algorithm calculates the number of edit operation that are necessary to modify one string to another string. Fro using this algorithm for dynamic programming we can use these steps :
1- A matrix is initialized measuring in the (m, n) cells the Levenshtein distance between the m-character prefix of one with the n-prefix of the other word.
2 – The matrix can be filled from the upper left to the lower right corner.
3- Each jump horizontally or vertically corresponds to an insert or a delete, respectively.
4- The cost is normally set to 1 for each of the operations.
5- The diagonal jump can cost either one, if the two characters in the row and column do not match else 0, if they match. Each cell always minimizes the cost locally.
6- This way the number in the lower right corner is the Levenshtein distance between these words.

An example that features the comparison of “HONDA” and “HYUNDAI”,

Following are two representations: Levenshtein distance between “HONDA” and “HYUNDAI” is 3.

The Levenshtein distance can also be computed between two longer strings. But the cost to compute it, which is roughly proportional to the product of the two string lengths, makes this impractical. Thus, when used to aid in fuzzy string searching in applications such as record linkage, the compared strings are usually short to help improve speed of comparisons.

Here’s the code that you can use the Levenshtein Distance and calculate percentage between 2 string.

See the Pen levenshtein.js by mzekiosmancik (@mzekiosmancik) on CodePen.

Javascript Algoritmaları – Bubble Sort 230 300 mezo

Javascript Algoritmaları – Bubble Sort

Bubble Sort okullarda öğretilen ilk algoritmadır diyebiliriz. Bu algoritma verim olarak en verimsiz sıralama algoritmasıdır ancak yapısal olarak anlaşılması en kolayıdır. Buradaki temel fikir sıralanacak dizi içindeki elemanların karşılaştırılmasıdır. Her seferinde 2 eleman karşılaştırılır ve sonrasında yerleri değişmeden önce doğru sıradalarmı diye emin olur. Basit olarak : 
*Ilk eleman ile ikinciyi karşılaştırır
*Eğer ilk eleman ikinci elemandan sonra gelmeliyse yerlerini değiştirir
*Sonra üçüncü eleman ile ikiyi karşılaştırır 
*Eğer  ikinci eleman , üçüncü elemandan sonra gelecekse yerlerini değiştirir ve bu işlem dizinin son elemanına kadar devam eder. 
Aşağıdaki resim anlattığım şu mantığı anlamanıza yardımcı olacaktır. 

Flowchart:

Örnek Kod:

See the Pen Bubble Sort by mzekiosmancik (@mzekiosmancik) on CodePen.

Javascript Algoritmaları – Selection Sort 300 363 mezo

Javascript Algoritmaları – Selection Sort

Selection Sort Bubble Sort’un biraz geliştirilmiş halidir ve elemanlar arasında döngü ile dönerken her eleman geçişinde sadece bir seçim yapar ve o seçimin sıralamasını değiştirir.
Bu sıralama : 
*Ilk elemanın en küçük olduğunu varsayar 
*Sonra bu elemanı ikinci sıradaki değer ile karşılaştırır.
*Eğer ikinci sıradaki eleman ilkinden küçükse bu sefer ikinci değeri en küçük olarak atar. 
*Bu işlem dizinin son elemanına dek devam eder.
*Eğer minimum deger başladığınız değer değilse yerlerini değiştirir.
Aşağıdaki resim biraz daha yardımcı olacaktır.

Selection Sort Çalışması:

Örnek Kod:

See the Pen Selection Sort by mzekiosmancik (@mzekiosmancik) on CodePen.

Javascript Algoritmaları – Insertion Sort 300 180 mezo

Javascript Algoritmaları – Insertion Sort

Insertion Sort sonuç olarak beklediğimiz sıralanmış listeyi her eleman için sıralayan çok basit bir sıralama algoritmasıdır. Bu yüzden de Heap Sort yada Quick Sort kadar verimli bir sıralama algoritması değildir. Insertion sıralamasını elimizdeki bir dizi iskambil kağıtlarını sıralamak gibi düşünebilirsiniz. Aşağıdaki animasyonu incelediğinizde göreceksiniz elinizdeki kağıtları sıramak için bir kartı aradan çekip yerine yerleştirdiğimiz gibi çalışan ve her seferinde sıralanmış bir dizi elde eden bir sıralama yöntemi. 

Animasyon:

FlowChart:

Örnek Kod:

See the Pen Insertion Sort by mzekiosmancik (@mzekiosmancik) on CodePen.

Javascript Algoritmaları – Binary Search 386 878 mezo

Javascript Algoritmaları – Binary Search

Binary search sıralı bir dizi içinde aradığımız değeri bulabilmek için çok verimli bir algoritmadır.  Verilen sıralı diziyi tekrar tekrar 2 ye bölerek aramaya devam eder sonunda aradığı değerin index numarasını bulana kadar. Binary search kullanımı için bir örnek verecek olursak , diyelim ki Google Maps ile çalışıyorsunuz ve kullanıcıdan aldığınız bir mekan ismini DB den gelen sıralı listenizden bulup o mekanın koordinatlarını alıp haritada gostermek istiyorsunuz bunun için en verimli arama algoritması Binary Search olacaktır. Nedenini açıklayacak olursak linear arama da algoritma tüm listeyi bastan sona gezer ve bulmaya çalışırdı bu da binlerce mekan bilgisi içinden bir isim bulabilmek için tek tek bastan sona hepsini incelemesi gerektiği anlamına geliyor hem uzun hemde yorucu bir işlem ancak binary search ile bu binlerce mekanı tek tek kontrol etmek zorunda değiliz.

İnsanlara bir algoritmayı anlatırken bazı küçük detayları söylemeye gerek yoktur örneğin bir kek yapılmasını istediğimizde buzdolabını nasıl açması gerektiğini yada yumurtaları dolaptan çıkarıp nasıl kırmaları gerektiğini söylememize gerek kalmaz insan bu gibi küçük detayları kendisi tamamlayarak kek yapma işlemini tamamlayabilirler ancak bilgisayarda bu gibi küçük detaylar  bilgisayar tarafından tamamlanamaz tüm detayların bilgisayara tanımlanması gerekir.

Programlama boyutunda algoritmaları uygulayabilmek için algoritmanın tüm detaylarını bilmek gerekiyor. Problem için girdiler nedir ? Çıktısı nedir ? Hangi değişkenler tanımlanmalı ? Bu değişkenler ne türde olmalı? Bir döngü olmalı mı ne gibi koşullarda olmalı gibi detaylar.

Hadi bu kadar boş yaptıktan sonra şu binary search e dikkatlide göz atalım. Buradaki ana fikir belirttiğimiz sayıyı bulabilmek için belirli aralıkları takip etmek. Diyelim ki bir tahmin oyunu oynuyoruz ve bu tahmin oyununda aklımızdan 1 ile 100 arasında bir sayı tutuyoruz. Ardından siz de bana tahminimizi söylüyorsunuz ve 25 diyorsunuz ve ben size Yukarı diyorum. Ardından siz 81 diyorsunuz bende size Aşağı diyorum. Şimdi biliyorsunuz ki sayı artık kırmızı ile işaretlediğimiz 26 ile 80 aralığında yani 25 ten küçük ve 81 den büyük sayıların hepsini elemiş olduk.

Her seferinde tahmininiz eğer doğru değilse kalan aralıktaki sayıları belli tahmin edilebilir bir aralığa bölerek devam ediyor. Üçüncü tahmininde53 diyorsunuz ve bende Aşağı diyorum yine ne yapmış olduk 26-80 aralığındaki sayıyı tekrar bölmüş olduk 

Doğru sayıyı bulana kadar böyle sürüp giden ama sonunda sayıyı bulduğumuz bir oyun gibi çalışır Binary Search.

İşlem sırası yazacak olursak

1-Min = 1 ve Max = n

2-Max ve Min sayı aralığında bir integer bir değer tut

3-Eğer sayıyı bulduysan çık. Doğru tahmin

4-Eğer tutulan sayıdan düşük ise Min değişkenine tahmin edilen sayıya 1 ekleyip atama işlemini gerçekleştir.

5-Eğer tahmin edilen sayı tutulandan büyük ise o zaman Max değerini tahmin edilenden 1 çıkarıp atama işlemini gerçekleştir.

6-2 numaralı işleme geri dön.

See the Pen Binary Search by mzekiosmancik (@mzekiosmancik) on CodePen.

Javascript Algoritmalari – Heap Sort 709 790 mezo

Javascript Algoritmalari – Heap Sort

Sıradaki sıralama algoritmamız Heap Sort yani Türkçe meali ile yığın sıralaması.

Bilgisayar bilimine göre heap Sort yani yığın sıralaması algoritması karşılaştırma bazlı bir sıralama algoritmasıdır. Heap sort geliştirilmiş seçimli sıralama olarak da düşünülebilir : yani diziyi sıralanmış ve sıralanmamış olarak bölümlere ayırır ve interaktif bir biçimde sıralanmamış olan bölümü daraltır son olarak bir bütün sıralanmış bir output ortaya çıkarır. Heap sort iyi dizayn edilmiş QuickSort dan daha yavaş çalışsa da , O(n log n) çalışma zamanında olumlu bır  avantajı vardır.  Heap sort yerinde ve kullanılabilir bir algoritma olmasına rağmen stabil çalışan bir sıralama algoritması değildir. 

Heap sort çalışması sırasında bir diziyi rastgele sırası değişen değerlerle sıralar.  Algoritmanın ilk çalışma aşamasında elemanlar heap yapısına uygun olacak sekilde tekrar sıralanır ve heap ağacı yapısı aşağıdaki animasyonda gösterildiği gibi sonucu sunar. 

Animasyon:

FlowChart:

Örnek Kod:

See the Pen Heap Sort by mzekiosmancik (@mzekiosmancik) on CodePen.

Javascript Algoritmaları – Merge Sort 625 598 mezo

Javascript Algoritmaları – Merge Sort

Bır baska sıralama tekniği ile birlikteyiz inkilizcesi Merge Sort türkçesi birleştirme kaynaştırma sıralaması olan bu algoritma 2 diziyi alıp küçükten büyüğe sıralamak üzerine kurulmuştur.

Aşağıdaki animasyondan da anlayacağınız üzere 2 dizi alınıyor daha sonra bunları n kadar alt dizilere bölerek bu alt listeleri karşılaştırılarak results dizisine ekleme yaparak sıralıyor.
Animasyon :

Flowchart :

Örnek Kod :

See the Pen Merge Sort by mzekiosmancik (@mzekiosmancik) on CodePen.

Javascript Algoritmalari – Quick Sort 453 593 mezo

Javascript Algoritmalari – Quick Sort

Merhaba arkadaşlar bazı aldığım notları sizlerle paylasmak istiyorum bunlar javascript  ile temel algoritma soruları ve yöntemleri olarak nitelendireceğimiz küçük yazılar olacak.
Hızlı sıralama
Hızlı sıralama bir dizi içindeki elemanları herhangi bir ilişki kuralı koymadan dümdüz küçükten büyüğe sıralamamıza yarayan bir algoritma hadi bakalım nasıl bir şeymiş…

Bu sıralama önce diziden bir ilk elemanı pivot olarak belirler ve onun etrafında sıralama yapmaya başlar. Küçükse left dizisine büyükse right dizisine. Yani pivot eleman her zaman ortada kalıcak şekilde ,ondan büyük ve kücükleri sıralar. Dikkat edecek olursanız fonksiyonun sonunda sıralanmış olan diziyi döndürürken left ve right dizileri içinde aynı metodu cağırarak yani onları da bir daha sıralamaya koyarak geri döndürüyoruz.
Sıralama Animasyonu :
Sorting quicksort animation

FlowChart :

Örnek Kod :

See the Pen Quick Sort by mzekiosmancik (@mzekiosmancik) on CodePen.

AngularJS – Factory 638 479 mezo

AngularJS – Factory

Merhaba arkadaşlar

Bu yazıyı okumadan önce hemen Servis makalesini okuyup devam ederseniz sizin için daha yararlı olacağını düşünüyorum.  Burdan Okuyun hemen. 😉

Factory Angularjs nin dış işleri bakanıdır. Yani dış bağlantılarla alakalı olan işleri yönetmemizi sağlar. Yani web servis çağrılarımızı bu Factory ler üzerine yazarak tüm Controller lar üzerinden rahatça erişebilir ve kullanabiliriz. Servisler makalesınde yaptığımız tanımın aynısını factory içinde yapabiliriz yani hem kodların kolay okunması hemde test edilmesini kolaylaştıran javascrıpt dosyalarıdır. AngularJS e başlayanlar bu iki yapıyı oldukça fazla karıştırırlar bu karışıklığı önlemek için bu oyunu bozuyoruz 🙂

 

Örnek üzerinde hazır github servisi çağırdım 🙂 angular yazıp aratın bakalın ne olacak  🙂

 

 

Umarım Yararlı Olur.
Bilgiyle Kalın.
M.Zeki OSMANCIK

AngularJS – Services 333 302 mezo

AngularJS – Services

Merhaba arkadaşlar
AngularJS de servisler hem kodların kolay okunması hemde test edilmesini kolaylaştıran javascrıpt dosyalarıdır. Servisler genelde kod içersinde kullanacığımız bazı methodlar için yazabiliriz. Örneğin bir hesaplama yapması gereken bir methodu servis olarak oluşturup Controller üzerinde birden fazla yerde kolayca kullanıkmasını mümkün kılabiliriz. AngularJS servis ve factory yi kullanarak Separation of Concerns konseptini desteklemektedir.
Peki Separation Concerns nedir ? Bir yazılımı oluşturan kodların katmanlara ayrılmasıdır. Web sitemizin veritabanından bir veri alıp bize sunması için gerekli olan her bir işlemi ayrı ayrı konumlandırmak da diyebiliriz ; veri tabanına bağlanan kod ayrı , onu alıp işleyen kod ayrı , son olarak web sayfası üzerinde gösteren kod ayrı yerlerde katmanlar halinde yazılır ki bu katmanları okuması hata tespiti yada test kodlarımızın çalışması kolaylaşsın. Bu konsepte en uygun örnek MVC Design Pattern dir.
Konumuza geri dönecek olursak AngularJS ile oluşturulan bir projede servis iç işlevlerin birden fazla controller üzerinden çağırılabilmesi için oluşturacağımız klasik javascript metotlarıdır.
Hemen kısa bir örnekle merakımızı dindirip. Örneği inceledikten sonra hemen Factory yazısınıda okursanız sizlere çok katkısı olacağını umuyorum.

Umarım Yararlı Olur.
Bilgiyle Kalın.
M.Zeki OSMANCIK

AngularJS – Dinamik Değişken 980 400 mezo

AngularJS – Dinamik Değişken

Merhaba arkadaşlar
Bildiğiniz gibi AngularJS de html ile js dosyası arasındaki bağı scope ile sağlıyorduk. Yani controller üzerinde tanımladığımız bır scope nesnesini html üzerinde {{}} veya ng-bind ile çağırabiliyoruz. Bahsettiğimiz değişkenler sabit tanımlanıp görüntülenenler. Bir de JS tarafında tanımlayabildiğimiz değişkenler var ki bu yazımızın konusuda budur zaten 🙂

Hemen HTML kodlarımızı yerlestirelim
[codebox 1]

ve Controller kodlarımız
[codebox 2]

Burada tanımladığımız $scope.dynamicVariable = {}; objemiz içersine istenilen miktarda değişken tanımlanabilir ve HTML tarafından da {{dynamicVariable[company.CompanyID]}} şeklinde kullanabiliyoruz.

ve AngularJS ile dinamik değişkenimiz hayırlı olsun 🙂 Bu da ornegimiz.

Umarım Yararlı Olur
Bilgiyle Kalın
M.Zeki OSMANCIK

AngularJS – Basit Search Filter 1024 789 mezo

AngularJS – Basit Search Filter

Merhaba arkadaşlar
Bu kez de AngularJS ile çooooooook ama çok basit şekilde listelediğimiz nesneler üzerinde bir Text input ile nasıl arama yapabiliriz sorusunun cevabını 2 satırda bir fiddle’da paylaşmak istiyorum.

Bu datayı AngularJS ile Controller içersinde oluşturalım ve bir $scope değiskeni içersine şu şekli tanımlamamız gerekiyor .
[codebox 2]

ve her zaman olduğu gibi HTML kodlarımızı bir oluşturalım ve listeme işlemini gerçekleştirelim.
[codebox 1]

Bu asamadan sonra JSON nesnemizin içersindeki elemanların ekranımıza listelendiğini görebileceksiniz.

İş arama kısmına geldiğinde ise HTML de de şu şekli bir değişiklik yapmamız gerekmekte.

[codebox 3]

Burada kullandığımız FILTER bizim listelediğimiz JSON nesnesi ya da array içersinde input üzerine tanımladığımız ng-model yardımı ile filtreleme yapıp $scope.companyList adında ki objeye atama yapar böylelikle siz de listeye abc yazdığınızda listedeki abc yi bularak $scope.companyList nesnesine atamasını yaparak bizlere gösterir 🙂

Benim yorumlamam bu kadar 🙂
Iste bu kadar basıt 🙂
Örnek kodu Fiddle’dan inceleyebilirsiniz.

Umarım Yararlı Olur
Bilgiyle Kalın.
M.Zeki OSMANCIK

Angular JS – Model 1024 576 mezo

Angular JS – Model

model

Biliyorum Model denilince aklınıza yukarıdaki ablalar geliyor ama hayaller Viktoriya Sikrıt  hayatlar Angular JS ne yapalım  !! Konuyla alakası bile yok tamamen ilgi çekmek için kullandım bu fotoğrafı. Bu model öyle bir model ki bu ablalar kadar güzel olmasa da angularjs ile hayatı kolaylaştıran güzel bir yapıdır şöyle ki :

Bob_at_EaselModel aslinda bir boyadir !!

“Ne diyon lan sen değişik? AngularJS anlatıyordun ne alaka boya badana!” diyebilirsiniz ama Model bir boyadır. Şimdi alakaya çay demleyelim.

MVC yi anlatabileceğim en iyi metafor belki de budur ve bundan sonraki kısımda modeli daha iyi anlayabileceğinizi düşünüyorum.

MVC deki

Model = Boya , Controller = Ressam , View = Tual olarak düşünürsek :

Yani son kullanıcıya bir görüntü, bilgi vb. şeyleri bir web sitesi üzerinde göstermek için öncelikle bu bilgileri ve görüntüleri bir yerden sağlamamız gerekiyor. İste bu verileri DB veya servislerden sağlayan ve View üzerinde Controller yardımı ile gösterilmesini sağlayan yapıya MODEL diyoruz…

Aynı yandaki Bob amcamızın boyayı alıp tuval üzerine küçük yalnız ağaçlar, mutlu bulutlar yapıp resmini tamamlayıp göstermesi gibi bir şey işte 🙂

Şimdi bakalım model denen şey AngularJS içersinde ne gibi bir role sahip bakalım View i nasıl boyayacak ?

Yine bir HTML dosyamız var ve bunun üzerine AngularJS kütüphanesini ve js dosyamızı ekledik ve ng-model nesnesini bu HTML dosyamız içersinde kullandık.

[codebox 1]

 

Burada kullandığım mydata benim modelim olmuş oluyor ve sayfa üzerinde bir veriyi alıp başka bir yere sayfayı yenilemeden, durulamadan, kurulamadan aşağıdaki resimde görüleceği üzere yazabiliyor. Controller içersinde bir tanımlama yapmadan bu şekilde kullanmak mümkün. Bu demektir ki biz controller üzerinde bir servisten ya da bir işlemden elde ettiğimiz değeri mydata adlı modele eşitlersek bu bizim HTML sayfamız üzerinde gösterilecek anlamına geliyor yani tuval üzerine boyamız dökülecek ve resim ortaya çıkacak.

model2

Controller üzerine çok basit bir işlem yaparak bu mydata değerini sayfa üzerinde güncellemeye çalışırsak.

[codebox 2]

Ve bunu HTML üzerinden tetiklemek istersek

[codebox 3]

Sonuç olarak çıktımız şu şekilde olacaktır

 model3

Burada olan olay şu: controller üzerine bir metot yazarak ng-model tarafından kullanılan nesneyi değiştirdim ve butona tıkladığımda anında View üzerinde görüntülemeye başladım. Bu string yerine servisten gelen bir veri olabilirdi ya da bir işlem sonucu elde edilen bir veri olabilirdi.

Umarım Yararlı Olur

Bilgiyle Kalın

M.Zeki OSMANCIK

Angular JS – View 478 326 mezo

Angular JS – View

Merhabalar

Angular JS nin V’si olan “View for Vendeta” ile devam ediyoruz. View denilen yapı aslında HTML dosyalarından baska bir şey değildir.Bildiğiniz gibi AngularJS için şöyle böyle demiştik ,sonra kendisinden Single Page Application olarak bahsetmiştik. Buradaki mantık sabit bir index.html sayfası ve içerisinde sayfalarımızın içeriği ile değişen küçük, leziz, gerçek html parçacıkları ile donatılmış, harika bir tat.

Şimdi isterseniz bu View olayı nasıl çalışıyor sayfa üzerinde nasıl gösteriliyor bir göz atalım…

Öncelikle gerekli olan malzemeleri sayıyorum

1 adet Angularjs kütüphanesi buradan temin ediyorsunuz

1 adet Angularjs Route kütüphanesi onuda buradan temin ediyorsunuz

1 adet Notepad++ o sizde var zaten olmayanı dövüyoruz 🙂

Evet tarife geçelim artık…

Index.HTML dosyanızı oluşturarak içersine şu kodları ekliyorsunuz.

[codebox 1]

Daha önceki Controller makalesindeki indexten tek farkı bir fazla kütüphane ve bir de ng-view denen bir dalga motor eklemişiz.

Ng-view  bizim sayfa göstericimiz  yani ASP.Net de ContentPlaceHolder vardı aynı ondan işte 🙂  ng-view üzerinde gösterilecek olan küçük html parçaları yani sayfa içerikleri ,ngroute kütüphanesini kullanarak oluşturacağımız config nesnesi üzerindeki yönergeleri takip ederek ng-view üzerinde değişirler.

O zaman bir config nesnesi oluşturalımda neymiş bu olay görelim.

[codebox 2]

Görüldüğü üzere module tanımlarken içerisine mutlaka ngRoute tanımlıyoruz ki config oluşturduğumuzda “bu ne lan?”  demesin.

Daha sonra config içersinde $routeProvider.when() metodunu kullanıp sayfa url si sonundaki parametreleri yazarak hangi view gösterilecek bu view in controller i ne olacak belirtebiliyoruz.

Sonrasinda buda Controller im bunu zaten biliyorsunuz bilmiyorsanız “o ne la?” diyorsanız buraya bakınız.

[codebox 3]

Bu arada yukarıda yazmış olduğum config ve controller tek bir JS dosyası içersine yazılıyor yani en azından ben şuanlık öyle yaptım sonra dosya yapısı ve klasörleme yöntemlerinide anlatacağım.

Son olarak eklemiş olduğum iki View  içersine aynı şeyleri yazdım oda şöyle ki :

[codebox 4]

Ve çalıştırdığım zaman aldığım çıktıda burada 🙂

view2 view1

Sonuç olarak 2 değişik sayfayı bir index.html içersinde gösterdik ve sayfa değişimlerini sağladık.

Umarım Yararlı Olur

Bilgiyle Kalın

M.Zeki OSMANCIK

Angular JS – Controller 657 486 mezo

Angular JS – Controller

Selam Arkadaslar

Yazmaya uzuuun bir ara verdikten sonar yine sizlerleyim 🙂 Angular JS konusuna devam edeceğiz. İlk yazımda AngularJS nedir mantığı nedir kısaca bahsettik. Bu yazıda ise MVC nin C sinden bahsedeceğim.

Controller

Controller MVC nin View’i yani son kullanıcının gördüğü ile model yani business logic katmanlarının iletişime geçtiği katmandır.  Yani kod yardimi ve model katmanı ile elde ettigimiz bir veriyi HTML kodlarına gönderme işini üstlenir. Aşağıdaki diagram bize Controller’ın görevini anlamakta biraz daha yardımcı olacaktır.

angularJs_mvc_framwork

Şimdi gelin isterseniz küçük bir örnek ile Controller ne işe yarıyor görelim. Öncelikle JS dosyaları ile çalışacağımızı belirtmek isterim herhangi bir editöre ihtiyacınız olmayacaktır Notepad++ işinizi görecektir. Tabi AngularJS kütüphanesinide buradan indirip eklemeyi unutmayın lütfen.

HTML dosyamizi asagidaki gibi oluşturuyoruz.

[codebox 1]

Ardından birde buradaki ng controller karşısında yer alan Controller1 adlı dosyamızı ekleyip içersine şu kodları eklemeliyiz.

[codebox 2]

Eklemiş olduğumuz ng-controller tagı ile html üzerinde çalışacak olan AngularJS kodlarının nereyi hedef alarak metotları araması ve çalıştırması gerektiğini belirtmiş olduk.

Bu yöntem ile bir angularjs uygulamasının içersine bir controller tanımlayarak bu controller içersine yazdığımız her kodu ve aldığımız her değeri html elemanlari üzerine aktarmamızın ne kadar kolay olduğunu görmüş olduk . Son olarak bu işlemin çıktısı aşağıdaki gibi olacaktır. Butona tıklandığında controller içersindeki metot çalışacaktır.

angularController2

Umarım yararlı olur

Bilgiyle Kalın

M.Zeki OSMANCIK

Angular JS Nedir? 980 400 mezo

Angular JS Nedir?

Merhaba arkadaşlar
AngularJS ile ilgili yazı dizisine başlamış bulunmaktayız 🙂 Haydi hayırlı olsun 🙂
AngularJS google tarafından desteklenen bir Javascript MVC(Modal View Controller) kütüphanesidir.
Modal : Verinin tutulduğu nesnelerdir ve ilişkili olduğu View nesnesini etkiler.
View : Template in yani görünümün tutulduğu nesnelerdir.
Controller : Modal ve View nesnelerini bağlayan nesnedir. İşlemler kontroller Controller üzerinde yapılır

AngularJS kendi kütüphanesinden başka kütüphanelere bağımlı değildir. Bunun için sadece AngularJS kütüphanelerini ekleyerek
tek sayfa uygulamaları geliştirmeye imkan sağlar. AngularJS’in en önemli özelliği çift yönlü olmalarıdır.
Yani modal’da olan değişiklik view’a , view’da olan değişiklik modal’a yansır. Directive’ler ile
yeni html tag’larının geliştirilmesine de olanak sağlar. Kodlar kısalır karmaşa ortadan kalkar.
AngularJS kütüphanesi yaklaşık 100kb boyuttadır. https://angularjs.org
AngularJS çeşitli bileşenleri içeren modüller şeklinde oluşturulmuştur. Bu modüller; Directive’ler Service’ler
Provider’ lar Type’lardır.

AngularJS Kütüphaneleri
ng  : AngularJS in temel modüllerini içeren kütüphanedir. Varsayılan olarak yüklenir.
ngRoute : AngularJS uygulamaları içersinde URL yönetimi yapmak için kullanılır. (angular-route.js)
ngAnimate : AngularJS uygulamalarında animasyon özelliklerini sayfalarımıza eklemek için kullanılır. (angular-animate.js)
ng-Cookie : Cookie yönetimi için kullanılır. (angular-cookies.js)
ng-Touch : Mobil tarayıcılar için geliştirilen sayfalarda kullanılabilir. (angular-touch.js)
ng-Mock : Testlerde mock işlemi yapmak için kullanılır.

Şimdi gelin size basit bir örnek yapalım 🙂

HTML Sayfamız
[codebox 1]

JavaScript Dosyamız
[codebox 2]

Örneğe buradan ulaşabilirsiniz 🙂

Bilgiyle Kalın
M.Zeki Osmancık

Unity – Kurulum ve IDE 1024 457 mezo

Unity – Kurulum ve IDE

Merhaba arkadaşlar

Unity ile oyun yazmaya merak sardım bu aralar hobi olsun diye işin ustası Tolga Kaçar ve biz öğrencileri Ahmet Kayar ve ben birlikte öğle aralarımızı Unity öğrenerek değerlendirmeye başladık. 🙂  İlk iş olarak nasıl kurulum yaparsınız diye anlatmak istedim hemen arkasından da IDE üzerindeki pencerelerden bahsedeceğim.

Unity ‘de “merhaba dünya” falan yapmayacagim bu yazımda sadece Unity nedir ,ne yapar, nerden kuracagiz actigimizda gelen ekranlar nedir kisaca ve basitce bunlardan bahsedecegim oncelikle Unity biz developerlara sunulmus 3d veya 2d oyun programlama sağlayan çok eyi ,çok da güzel eyi bir IDE. 🙂 Oyun programlama ile ilgili hiç bir fikriniz yoksa şu soru kafalarda belirebilir ben 3 boyutlu çizim bilmiyorum nasil olacak ? Dert etmeyin hazır, beleş veya ücretli yada ücretli ama beleş assetler yani 3 boyutlu yada 2 boyutlu cizimler nesneler internette mevcut 😉 Çizim olayini hallettik peki ya kod olayi derseniz onuda C# ile hallediyoruz 🙂
Evet cok geyik yapmadan kuruluma gecelim artik 😉 Ilk olarak unity3d  sitesine giriyoruz ve GET UNITY butonuna tıklayarak installer dosyasını PC ye indiriyoruz ve kuruluma geçiyoruz 🙂

Unity-setup1

Download bittiyse sıra ile kurulum islerine gecebiiriz. Kurulumda dikkat edilecek isaretlenecek onemli bir configurasyon yok o yuzden resimleri arka arkaya koyuyorum

Unity-setup2

Unity-setup3

Unity-setup4

Unity-setup5

Unity-setup6

Kurulumu yaptik programimizi actik heyecanliyiz 😉 gelelim Unity yi açıp ilk etapda cikan ekranda neler var gordugumuz seyler neler onlara bakalım:

Unity-setup7

Unity-setup9

unity5

 

Hieracrhy : Bu listede oyun nesnelerimiz yer alir karakter yerler gokler gorup gorebilecegimiz hersey burada yer alir ilk etapda zaten bir kamera nesnesinin eklenmiz oldugunu gorebiliyoruz.

Inspector : adiindanda anlasilacagi gibi oyun nesnelerimizin pzelliklerini gorebildigimiz ve editleyebilgimiz penceredir kendisi 😉 u ity i actiginizda sol tarafta hicbirsey gorunmuyorsa kamera nesnesine tikladigimizda bu kameranin ozelliklerini gorebiliriz.

Scene : orta kisimda bulunan bu yer bizim sahnemiz oyunumuzu bu sahne uzerinde goruntuleyip nesneleri burada yerlestiriyor olacagiz. Ilk bakildiginda kamerani. Sahne uzerine yerlesmis oldugunu gorebiliriz

Asagidaki pencere . Bu pencerede projemiz icersinde bulunan resimler spritelar materialler , script dosyalari kisaca proje icerigi yer alir.

Evet bu yazida bu kadar unity i kurduk ve pencereleri tanidk bir sonraki yazida 2 boyutlu bir oyuna baslayacagiz birlikte tabi cok hizli ilerlemeden 🙂 tek makalede bi mario beklemeyin 😉 ayrica projemizide yine size duyuruyor olacagiz 😉

Şimdilik bu kadar 🙂

Umarım Yararlı Olur

Bilgiyle Kalın

M.Zeki Osmancık

XRebel Nedir ? 1024 755 mezo

XRebel Nedir ?

Merhaba arkadaşlar

İlginç bir konu ile karşınızdayım 🙂

Web Sayfaları yapıyorsunuz java kullanıyorsunuz ve sizin ve takım arkadaşlarınızın yaptığı sayfaların performansı ile ilgili şüpheleriniz var. Sayfaların performansını ölçen bir tool mevcut adı XRebel.

XRebel sayfa içersindeki sorguları session verilerini vb  performansı etkileyen kısımları ölçerek ayrıntılı bir rapor çıkartabilen bir tool. Dilerseniz 15 günlük Trial i mevcut.

Şimdi sizlere nasıl XRebel tool unu sayfamız üzerine entegre ederiz resimlerle bahsetmek isterim 😉

Çoooook basit şekilde kurulumu anlatmak gerekirse

Öncelikle http://zeroturnaround.com/software/xrebel/ adresinden Trial versionunu indiriyorsunuz ve dosyaları zipten çıkarıyorsunuz. Ardından C:/ altına yerleştirdikten sonra Eclipse üzerinde bir Dynamic Web App oluşturuyor ve içersine kodlarınızı yazıyorsunuz benim kodlarım” asdasdasdasdasdasdasd” oldu  😀 Şu şekilde

xrebel2

Sonra Run Configuration kısmını açıp C:/ içersine yerleştirdiğim xrebel.jar dosyasını VM Arguments üzerine ekliyoruz.

 

xrebel1

 

Projeyi çalıştırdığımda kenarda küçük bir bar gelmişse aşağıdaki gibi bu iş tamam demektir. Artık tüm web sitemiz ile ilgili ölçümler başarılı şekilde yapılmaya başlanacak ve ayrıntıları ile bizlere listelenecek. Eğer lisansım gelirse sizlere daha ayrıntılı bir sunum yapacağım 😀

xrebel3

Demo videosunuda buradan izleyebilirsiniz 🙂 

Bilgiyle Kalın

M.Zeki Osmancık

Visual Studio Online da Proje Silme İşlemi 600 274 mezo

Visual Studio Online da Proje Silme İşlemi

Merhaba arkadaşlar

Biraz önce Visual Studio Online da bulunan bir projemi silmek istedim ve uzun süre aradıktan sonra projenin nasıl silineceğini buldum 😀 sizlerlede paylaşmak istedim 😀 Visual Studio  Online ı açtığımızda solda üstte Ayarlar simgesi var ahanda şöyle  🙂  Ona basıyorsunuz sonra karşınıza çıkan ekranda projeler listelenecek hangi projeyi silecekseniz sağ click ve Delete o işlemde ahanda şöyle 🙂

IC686855

Umarım yararlı olur 🙂

Bilgiyle Kalın

M.Zeki OSMANCIK

Proje Geliştirme Süreçleri – V Model 1024 704 mezo

Proje Geliştirme Süreçleri – V Model

Merhaba arkadaşlar

Yeni bir gün yeni bir Proje Geliştirme Süreci olan V Model ile karşınızdayım 🙂

Daha önce ki yazılarda Waterfall ve Agile yöntemlerinden bahsetmiştik. V model biraz Waterfall metoduna benzer. Yani Waterfallda olduğu gibi tüm analiz ve dökümantasyonun en başta yapılması ve bitirilmesi ihtiyaçların kesinleştirilmesi gerekiyor. Verification and Validation olarak bilinen ve V Model olarak kısaltılan bu metotda Waterfall dan farklı olarak analiz ve ihtiyaçlar kesinleştikten sonra yazılım geliştirmeye başlamadan önce bir test planı oluşturulmalıdır. Bu modelin yazılım ve test döngüleri çizildiğinde V harfi ortaya çıkar 😀  Walla çıkar 😀 aşağıdaki resmi inceleyebiliriz 😀

V-Model

 

Resimde görüldüğü gibi V harfi çıkıyormuş 🙂 resim üzerinden bahsetmek gerekirse burada process sırası olarak sol taraftan sağ tarafa gidiliyor. Öncelikle Analizlerimiz çıkıyor sonra Fonksiyonel özellikler belirleniyor sonra Dizayn aşamasından geçiyor bu analizler ve Programcıların anlayabileceği şekle getiriliyor en ortada kocaman yazdığı gibi programı kodluyoruz sonra unit testi unutmuyoruz onlarsız olmaz 😀 unit testten sonra entegrasyon testi sonra sistem testi sonra kullanıcı kabulu ve kapanış 😀

Burada V harfininde bir özelliği var aslında şimdi her maddenin hemen karşılığında bir madde mevcut soldan sağa doğru giderken kodlama aşamasından sonra sağ tarafta bulunan aşamalardan birinde bir sakatlık bir eksik efendime söyleyeyim bir istek arzu gelirse bu hemen karşısındaki aşamaya atlar yine resimde görüldüğü gibi.

Yani User Acceptence aşamasına gelmiş bir yazılımda kullanıcı bu ürünü kabul etmezseeee 😀 en başa dönüyoruz 😀 tekrar analiz tekrar falan falan falan 😀 Sil baştan olmasada istenilen yeni özellik ile alakalı tüm processler için tekrar bir döngü tekrar bir iş tekrar bir çalışma gerekiyor 🙂

V model çokda zor değil değilmi 🙂 resim zaten açıklıyor…

Umarım yararlı olur

Bilgiyle Kalın

M.Zeki OSMANCIK

 

Kanban Ne Ola ki ? 508 212 mezo

Kanban Ne Ola ki ?

Merhaba arkadaşlar

Proje geliştirme süreçleri ve bu süreçlerde kullanılan metotlar vs ile ilgili küçük bilgiler vermeye tam gaz devam ediyorum 😀 Sırada Kanban var

Kanban, tam zamanında Üretim ortamında malzeme hareketlerinin kontrolü amacıyla kullanılan bir çizelgeleme yaklaşımıdır. Toyota’nın üretim verimliliğini artırmak amacıyla Taiichi Ohno tarafından geliştirilmiştir. Yöntem 1953’ten bu yana kullanılmaktadır. Aslında japoncada görsel işaret veya kart anlamına gelir. Üretimin tam zamanında gerçekleşmesi konusunda başarılı bir metotdur. Tüm olayları görselleştirir ve üretim sürecini büyük resimde görme imkanı sağlar.

Toyotada kullanılmaya başladığına göre küçük bir tahminle biraz hayalgücü ile bu sistemin aslında nasıl çalıştığını hayal etmek çok da zor değil. Bir üretim hattı mevcut ve bu üretim hattı üzerinde ürün bazı işlemlere tabi tutuluyor ve en son olarak bir ürün yani araba ortaya çıkıyor. Örneklemek gerekirse bir band üzerinde önce arabanın iskeletine parçalar sıra ile takılıyor kapılar , çeşitli aksamlar , motoru ,camları, iç aksesuarları gibi bu sıra ile giden işlemlerde bir aksilik olmaması önemli bunun içinde süre ve malzeme kontrolü önemli 😉 Kanban tüm bu işlemleri görselleştirip takibi kolaylaştırıyor 😉

Sen ne anlatıyorsun değişik 😀 Toyota kullanıyorda bizdemi araba üreteceğiz ?  diyebilirsiniz 😀 demeyin çünkü Kanban olayının yazılımada uyarlanması çok da zor değil. Adamlar yapmış 2004 yılında bu Kanban felsefesini yani görselleştirme işini yazılımada uyarlayıp bir metodoloji haline getirmişler.

Özet olarak bahsetmek gerekirse Kanban metodu mevcut sürecinizde hemen bir değişikliğe gitmenizi zorunlu kılmaması önemli avantajlarından bir tanesi. Zamanla yazılımın veya sürecin evrimleşeceğini öngörür.

Yani Kanban Yazılım Geliştirme Süreci veya Proje Yönetimi diye bir şey yoktur. Kanban bir süreç değildir, sürekli akışı teşvik eden, hafif siklet bir metodtur.

Kanban, temelde 4 temel prensibi kullanır:

  • Ne biliyorsan onunla başla,
  • Artırımsal ve evrimsel değişimi takip etmeyi kabul et,
  • Mevcut sürece, rollere, sorumluluklara ve ünvanlara saygı göster.
  • Tüm seviyelerde liderliği teşvik et

Bu prensipler akabinde Kanban’ın 5 ana özelliğide şöyle özetlenebilir :

  • İş akışını görselleştirir
  • Aynı anda yapılan işleri sınırlandırır
  • Akışı yönetmeyi ve ölçmeyi kolaylaştırır
  • Süreç ilkelerini belirgin kılar
  • İşbirliği yaparak iyileştirmeyi sağlar

Bu süreçte belli adımlarda yapılan iş diğer adımlarda yapılan işlerden daha çabuk sonuçlanabilir. Bir adımın çıktısı diğer bir adımın girdisidir. Zamanında tüketilemeyen görevler o adımda bir birikime neden olacaktır. Kanbanda her bir adımda eş zamanlı yapılacak işlerin sayısına bir sınır getirilmesi sürecin darboğazlarının azalmasına imkan tanır. Bir üretkenlik yaratılıp arkadan gelmekte olan işler için bir yer açar. Sınırlama getirilmemesi durumunda bir sürecin belli bir adımında çok iş yapılıyor olmasına rağmen biten bir iş olmayacaktır. Sonuç olarak takım ne kadar çok çalışırsa çalışsın o zamana kadar bir değer üretememiş olacaktır.

Örnek olarak bir Web sayfası yapıyorsanız bu aşamada tasarım için 1 kişi , programlama için 2 kişi olduğunu varsayarsak kodlamada gerçekleşecek bir gecikme tasarımdan çıkan işler bitip ,development aşamasına gelen işleri çoğaltacak ve bu aşamada developer arkadaşlar zorlanacak belki de yeni bir developer ihtiyacı doğacak . Ama bu işler sınırlandırılırsa bu dar boğaz yada işlerin belli aşamalarda artması durumu desek daha doğru olur biraz daha aza indirgenmiş olur. Ayrıca Kanban ile büyük resim görüldüğünden , resimde bu problemin yöneticiler tarafından görüntülenmesi  çalışanlar açısından da önemli ve rahatlatıcı bir özellik.

Kanban’da görselleştirme Değer Akış diyagramları ile ve kanban tahtası ile sağlanabilir. Değer akış diyagramları mevcut durumun, gelecekteki sistemin anlaşılması ve israfın önlenmesi için kullanılır.
Kanban Tahtası ahanda aşağıdaki gibi birşeydir.

kanban-movement

Resimde görüldüğü gibi işler belli başlıklarla ayrılır her iş bittiğinde bir sonraki aşamaya geçer ve bitirilirler.

Kanban ile kendi kişisel işlerinizi bile takip etmek kolay 😉 bunun için internet ortamında kullanılan bazı uygulamalarda mevcut. 😉

Umarım Yararlı Olur

Bilgiyle Kalın

M. Zeki OSMANCIK

Proje Geliştirme Süreçleri – Agile Scrum 1024 841 mezo

Proje Geliştirme Süreçleri – Agile Scrum

Merhaba arkadaşlar

Proje geliştirme süreçleri ile alakalı bilgi almaya  devam ediyoruz. Bildiğiniz gibi bir önce ki yazımda Waterfall metodunu türkçem yettikçe anlatmaya çalıştım. Bu yazımda ise farklı bir tür yeni bir trend herkesin öğrenmeye uygulamaya çalıştığı bir metot olan Agile Scrum metodundan yine türkçem yettiğince bahsetmeye çalışacağım 🙂

Agile türkçe meali Çevik olan bu metot aşamalı olarak projeleri geliştirmemizi sağlıyor ve bu sayede biraz esnek davranabilmemizi sağlıyor. Waterfall metodunda analiz kısmı bittikten sonra müşteriyle uzun süre görüşemediğimiz çok özlediğimiz doğrudur işte Agile yöntemi bu özleme son veriyor ve müşteri ile sürekli iletişim içinde bulunmamızı sağlıyor 😀 Yani kısacası Agile adı gibi projemize çeviklik kazandırıyor ve gerek hız gerek üretilen değerler açısından bize güzel faydalar sağlıyor. 🙂

Agile denen yöntemin içersinde de farklı frameworkler mevcut bunlardan biri Scrum diğeri XP dir. Windows XP değil ama 😀  meali Extreme Programming. 🙂

Bu metotlardan şimdilik Scrum dan bahsedeceğim XP için sonraki yazılardan birinde bahsedebilirim…

Scrum denilen şey itiş kakış anlamına gelen ama anlamı kadar karmaşa içinde yürümeyen bir yöntem. Bu yöntem içersinde bulunan bazı terimleri sizlere konu ile birlikte açıklamak isterim 🙂

Product Owner : İşi yaptırmak isteyen tarafta bulunan ve yazılımın tüm detayına hakim olan bize anlatabilecek arkadaştır.

Product Backlog : Yazılım için yapılmış analiz diyebiliriz. yazılımımız şöyle güzel olsun, böyle iyi olsun , hatta şöyle de güzel olsun içinden atlar kuşlar böcekler çıksın şeklinde olabilen ve ürünü yaptıracak olan Product Owner tarafından yazılmış belli formata sahip User Story‘ ler  bütünüdür.

Herneyse bu PO (Petrol Ofisi değil Product Owner 😀 ) arkadaş bizlere fantazi dünyasının sınırlarını zorlayarak bütün bir product backlogu oluşturduktan sonra bu işleri en çok önemliden en az önemliye sıralar ve teslim eder. Product Backlog yaşayan bir liste olabilir yani sürekli madde eklenebilir silinebilir vs vs. Bu PO nun zevkine kalmış artık 🙂

User Story’ler INVEST diye kısa bir isimle adlandırılan kurallar dizisini içerirler.Invest şöyle sıralanır :

  • Indipendent(Bağımsızlık):User Story kendi başına bir içeriğe sahip olmalıdır. Diğer user story’lere bağlı olmamalıdır.
  • Negotiable(Tartışılabilir): User Story’ler, bir sprint içeriğine girene kadar her an değiştirilebilir.
  • Valuable(Değer): bir user story son kullanıcı için bir değer ifade etmelidir.
  • Estimable(Tahmin yürütülebilir): Bir user story’nin süresi tahmin edilebilmelidir.
  • Sized appropriately(Makul boyut): User Story’ler plan, görev ve öncelik bakımından derecelendirilmesi ele alınabilmesi için çok kompleks yapıda olmamalıdır.
  • Testable(Test edilebilirlik): User Story’ler test edilebilirliği mümkün kılmalıdır.

Sonrasında Scrum takımı bu product backloglar içersinde (burası önemli) her seferinde bir değer üretebilecek şekilde 2 veya 4 haftalık bir süre olan proje bitimine kadar tekrar eden  ve Sprint adı verilen dönem içinde gerçekleştirilmek üzere görevleri alır sıralar kendi içinde dağıtır ve geliştirmeye başlar. Tüm bu işleri yöneten arkadaşa Scrum Master denir. Çok karizmatik bir ünvanı bulunan bu arkadaş takımın tüm yükünü omuzlarında taşır ,ihtiyaçları sağlar , engelleri kaldırır, gaz verir vs vs.

Bu takım Scrum kuralları gereği bazı seremoniler yapmak zorundadır. Mesela her sabah maksimum 15 dk süren “Ne yaptım?” “Ne yapacağım?” “Önümde engel varmı varsa neler?” sorularının kısaca cevaplandığı bir toplantı. Sonra Sprint başlamadan önce acaba hangi taskları alsakta yapsak müşteriye nasıl bir değer üretsek sorusunun tartışıldığı Sprint Review. Bir de takımın kendi içinde birbirini tebrik ,tahrik edebildiği yanlış varsa “ben nerde yanlış yaptım” şarkısının söylendiği güzel bir durum varsa ortamın şenlendiği garip bir o kadar ilk seferde adını söylemesi zor bir toplantı vardır ki oda Retrospective toplantısıdır. 🙂

Sprint başlar mutlu yazılımcılar kodlarını yazmaya başlarlar her gün birbirlerine mutluluk içinde neler yaptıklarını anlatırlar ve 2 veya 4 hafta dediğimiz sprint süresi sonunda müşteriye bir demo gösterirler bu elle tutulur gözle görülür müşterinin test etmesine olanak veren hatta ve hatta müşterinin  “İyi olmuş hadi bunu Deploy edelim böylece” lafını söyletebilecek bir yazılım olmalıdır ki Scrum dediğimiz metot amacına ulaşabilsin 🙂

Scrum ı açıklayan çok güzel bir resim aşağıdaki gibidir 🙂

Scrum-Plan-Do-Check-Act-Diagram

 

Peki bitti mi tabiki de bitmedi 🙂 birde son olarak bahsetmek istediğim küçük bir konu da Burn Down Chart.

Born-down chart İş sonu grafiği anlamına gelir ve Sprint sırasında takım üyeleri görevlerini yerine getirildikçe kalan iş ve yapılan iş arasındaki korelasyonu belirten bir grafik ortaya çıkar.İşte bu grafik takım üyelerine veya yöneticilerine fikir verir. Aynı zamanda takımın iş için istediği sürelerin yeterli olup olmadığı ve işin zamanında tamamlanıp tamamlanamadığı konusunda da fikir veren bir grafiktir. Adının burn down olması sanırım takımın işlerini zamanla eş değer şekilde bitirmeleri yakmaları eritmeleri vs. olabilir 🙂 Bu chart örneğinide yine aşağıdaki gibi görebilirsiniz.

BurnDownChart

Kısaca fikriniz olması açısından Agile ve Scrum ı açıkladım.

Umarım Yararlı Olur

Bilgiyle Kalın

M.Zeki OSMANCIK

Proje Geliştirme Süreçleri – Waterfall 512 320 mezo

Proje Geliştirme Süreçleri – Waterfall

Merhaba arkadaşlar
Yazılım geliştirmede çok sayıda farklı model ve süreçler mecvuttur. Bu yazımda sizlere yazılım dünyasında diğer modellere de örnek olan “Waterfall Model”inden bahsetmek istiyorum .Bu model bir yazılımın geliştirme sürecini Plan, Design, Built, Test ve Deploy aşamaları olarak ele alır. Bu aşamaların her biri birbirini bekleyen ve etkileyen  süreçlerdir.
Plan (Analiz)
Bir problem çözümü olarak nitelendirilen yazılımın ne yapacağını ve nasıl yapacağını belirlediğimiz yani problemi tanımladığımız aşama analiz aşamasıdır. Yazılan kod isteneni doğru bir şekilde yerine getirebiliyorsa başarılı bir yazılım olarak nitelendirilebilir bu sebeptendir ki  öncelikle yazılımdan ne istendiğinin doğru bir biçimde anlatılması ve yorumlanması gerekir. Analiz aşaması personel, donanım ve sistem gereksinimlerinin belirlenmesi, sistemin fizibilite çalışmasının yapılması, kullanıcıların gereksinimlerinin analizi, sistemin ne yapıp ne yapmayacağının kısıtlamalar göz önüne alınarak belirlenmesi, bu bilginin kullanıcılar tarafından doğrulanması ve proje planı oluşturulması adımlarından oluşur.

Design (Tasarım)
Yazılımın analizini yaptık ihtiyaçlarını belirledik artık bilgi sahibiyiz ne nasıl olur az çok biliyoruz bundan sonra ki aşamada neler yapacağiz peki ? Analizin sonucunda belirlenen ihtiyaçlara yanıt verecek yazılımın temel yapısının oluşturulduğu aşamadır. Yazılım tasarımı, bir bileşen veya sistemin nasıl gerçekleştirileceğini belirlemek için kullanılan teknikler, stratejiler, gösterimler ve desenlerle ilgilidir. Bu aşama yazılım bileşenleri arasındaki ara yüzler, mimari tasarım, veri tasarımı, kullanıcı ara yüzü tasarımı, tasarım araçları ve tasarımın değerlendirilmesi alt süreçlerini de kapsamaktadır. Tasarım aşaması, yazılımın hem kullanıcı ara yüzünü hem de programın omurgasını ortaya koymaktadır. Yapılacak tasarım, yazılımın işlevsel gereksinimlere uygun olmasının yanı sıra kaynaklar, performans ve güvenlik gibi kavramları da göz önüne alınarak gerçekleştirilmelidir. Kısaca tasarım kısmında yazılım içersinde karşılaşılabilecek tüm herşey göz önüne alınarak kodlama için start verilmeye uygun ortam hazırlanır.
Build (Kodlama)
Şimdiki kısım bizim en sevdiğimiz kısım Kodlama 😀 Bu aşama, tasarım sürecinde ortaya konan veriler doğrultusunda yazılımın gerçekleştirilmesi yani kodların yazılması aşamasıdır. Bu süreç programlama çalışmalarının yanı sıra yazılımın geliştirilmesi ve kullanıcıya ulaştırılması sürecindeki bütün çalışmaları kapsar. Tasarım sonucu üretilen süreç ve veri tabanının fiziksel yapısını içeren fiziksel modelin bilgisayar ortamında çalışan yazılım biçimine dönüştürülmesi çalışması olarak da nitelendirilebilir. Yazılım geliştirme ortamı, programlama dili, veri tabanı yönetim sistemi, yazılım geliştirme araçları seçimi kodlama aşamasında gerçekleştirilir.
Test
Yazılımı yazdık bitirdik yada sadece bitirdiğimizi sanıyoruz 😀 şimdi sıra geldi Test aşamasına, yazılım kodlanması sürecinin ardından gerçekleştirilen sınama ve doğrulama aşamasıdır. Elde edilen uygulama yazılımının hem belirlenen gereksinimleri sağlayıp sağlamadığı hem de gerçekleştirimin beklentilere uygun olup olmadığını kontrol etmek için statik ve dinamik sınama tekniklerinden yararlanır. Statik teknikler, yazılımın tüm yaşam döngüsü boyunca elde edilen gösterimlerin analizi ve kontrolüyle ilgilenirken, dinamik teknikler sadece gerçekleştirilmiş sistemi içerir. Yazılım üretiminde ilk testler genelde geliştirme sürecinde programcı tarafından yapılır. Bununla birlikte, asıl hata ayıklama ve geribildirim hizmeti test ekipleri tarafından yapılır. Testler ve geribildirim müşteri yazılımı kullandığı sürece devam eder. Test sürecinde en faydalı geribildirimler son kullanıcı test gruplarından gelir.
Deploy
Yazılımımız yapılan analiz doğrultusunda beklendiği gibi çalışıyor ve testlerinden de başarılı şekilde geçti sıra geldi artık müşterimizin kullanımına açmaya. Bu aşama tüm gereksinimler tamamlanmış ve müşterimiz memnun şekilde projesini teslim etme aşamasıdır. Bu aşamadan sonra belki bakım aşamasıda bu sürece dahil edilebilir.

Aşağıdaki resimde waterfall yönteminin işleyişini görebiliriz.

waterfall

Umarım Yararlı Olur
Bilgiyle Kalın
M.Zeki Osmancık

C# ile Powerpoint Sunumu Hazırlamak 554 382 mezo

C# ile Powerpoint Sunumu Hazırlamak

Merhaba arkadaşlar
Uzun süreden beri bir makale yazmaya vakit bulamıyorum ama yavaş yavaş geri dönüyorum. Bu yazıda sizlere zevkli küçük bir örnek göstermek istiyorum. 😀 C# üzerinden program yardımı ile PowerPoint sunumu hazırlamanın nasıl olduğu ile ilgili başlangıçta çok işinize yarayacak bir kod parçası
Bunun için öncelikle bir windows Forms projesi açalım ve 1 tane Buton ekleyelim 🙂 Projemiz içersine Referans olarak 2 önemli kütüphane eklememiz gerekiyor. Sağa tıklayıp “Add Reference” dedikten sonra “COM” sekmesi içersinde bulunan microsoft graph 15.0 object library ve microsoft PowerPoint 15.0 object library kütüphanelerini seçip ekleyelim.
Artık gerisi çok kolay 🙂 işte bundan sonra işi yapacak olan kod parçası

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;

namespace testToCreatePttFileFromImages
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
string pictureFileName = “C:\\picToVideo\\2.jpg”;

Microsoft.Office.Interop.PowerPoint.Application pptApplication = new Microsoft.Office.Interop.PowerPoint.Application();

Microsoft.Office.Interop.PowerPoint.Slides slides;
Microsoft.Office.Interop.PowerPoint._Slide slide;
Microsoft.Office.Interop.PowerPoint.TextRange objText;

// Create the Presentation File
Presentation pptPresentation = pptApplication.Presentations.Add(MsoTriState.msoTrue);

Microsoft.Office.Interop.PowerPoint.CustomLayout customLayout = pptPresentation.SlideMaster.CustomLayouts[Microsoft.Office.Interop.PowerPoint.PpSlideLayout.ppLayoutText];

// Create new Slide
slides = pptPresentation.Slides;
slide = slides.AddSlide(1, customLayout);

// Add title
objText = slide.Shapes[1].TextFrame.TextRange;
objText.Text = “The Header Of The Presentation”;
objText.Font.Name = “Arial”;
objText.Font.Size = 32;

//objText = slide.Shapes[2].TextFrame.TextRange;
//objText.Text = “this text come after the heading with bullet”;

Microsoft.Office.Interop.PowerPoint.Shape shape = slide.Shapes[2];
slide.Shapes.AddPicture(pictureFileName, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, shape.Left, shape.Top, shape.Width, shape.Height);

//slide.NotesPage.Shapes[2].TextFrame.TextRange.Text = “the text is for the notes to specific page”;

pptPresentation.SaveAs(@”c:\picToVideo\fppt.pptx”, Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsDefault, MsoTriState.msoTrue);
pptPresentation.Close();
pptApplication.Quit();

}
}
}

Java – AES Algoritması ile Encryption ve Decryption 691 618 mezo

Java – AES Algoritması ile Encryption ve Decryption

Merhaba arkadaşlar

Bu yazımda sizlere AES algoritması kullarak nasıl Encryption işlemi yapabilirsiniz en basit haliyle anlatmak istiyorum. Eclipse i açtık yeni bir Java projesi olusturduk sonrasında 2 adet class’ı projemiz içersine ekledik isimleri TEST.java  ve ENCRYPT.java.

Amaç aslında Encrypt.java class ını başka projelerde de kullanılacak şekilde dizayn etmek 😉

Encrypt class ı içersine aşağıdaki kodları ekleyeceksiniz. 🙂

import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.*;
public class encrypt {

	private static final String ALGO = "AES";
	private static final byte[] keyValue =  new byte[] 
        { 'M', 'e', 'Z', 'O', 'b', 'l', 'o','g', 's', 'B', 'e','s', 't', 'K', 'e', 'y' };

	public static String encrypt(String Data) throws Exception {
		Key key = generateKey();
		Cipher c = Cipher.getInstance(ALGO);
		c.init(Cipher.ENCRYPT_MODE, key);
		byte[] encVal = c.doFinal(Data.getBytes());
		String encryptedValue = new BASE64Encoder().encode(encVal);
		return encryptedValue;
	}
	public static String decrypt(String encryptedData) throws Exception {
		Key key = generateKey();
		Cipher c = Cipher.getInstance(ALGO);
		c.init(Cipher.DECRYPT_MODE, key);
		byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedData);
		byte[] decValue = c.doFinal(decordedValue);
		String decryptedValue = new String(decValue);
		return decryptedValue;
	}
	private static Key generateKey() throws Exception {
		Key key = new SecretKeySpec(keyValue, ALGO);
		return key;
	}
}

Ardından test.java yani çalıştırılacak olan class ımız içersinde main metodu bulunduran class içersinede aşağıdaki kodları ekliyorsunuz. Encrypt classı içersinde oluşturduğumuz metotları çağırıyoruz.

public class test {
	public static void main(String[] args) {
		String password = "Hello Word İt's MEZO Blog";
		String passwordEnc;
		String passwordDec;
		try {
			passwordEnc = encrypt.encrypt(password);
			passwordDec = encrypt.decrypt(encrypt.encrypt(password));

			System.out.println("Plain Text : " + password);
			System.out.println("Encrypted Text : " + passwordEnc);
			System.out.println("Decrypted Text : " + passwordDec);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Ve işlemimiz bitti işte bu kadardı 🙂  artık Run As Java Application diyerek çalıştırıyor aşağıdaki çıktımızı alıyoruz.

 

Programımızın Çıktısı
Encrypt edilecek Text : Hello World It’s MEZO Blog
Encrypt edilmiş Text : 2loMo4Zhrtsbqg/4NOk1MpYp1uVbXkDwUNZKnons30o=
Decrypt edilmiş Text : Hello World It’s MEZO Blog

 

Umarım Yararlı Olmuştur

Bilgiyle Kalın

M.Zeki OSMANCIK

JSP MasterPage Sayfası Nasıl Yapılır? 299 299 mezo

JSP MasterPage Sayfası Nasıl Yapılır?

Merhaba arkadaşlar

JSP ile uğraşmaya devam ederken ASP.Net in kıymetini biraz daha iyi anlamaya başlıyorum ve sizlerede anlatmaya devam ediyorum.

Başlıktanda anlaşılacağı gibi JSP web sayfalarında ASP.Net de bulunan masterpage gibi bir şablon oluşturup o şablon üzerinde nasıl işlem yaparız biraz bahsedelim 🙂

Arkadaşlar JSP sayfalarına ekleyebileceğiniz bir Masterpage yapısı YOK !!! Maalesef ki yok…

Peki napıyoruz o kadar başlık açtık bari bir yol yordam gösterelim değilmi 😛  Diyelim ki aşağıdaki giib bir yapımız var ve bunun bütün sayfalar için şablon olmasını istiyoruz.

layout

Hemen kendimize Header.jsp adında bir dosya oluşturup bu dosya içersine istediğiniz header da bulunması gereken kodları yerleştiriyorsunuz örneğin  aşağıdaki kodlar gibi 🙂
[codebox 1]
Sonra hemen devam ediyoruz Footer.jsp adında bir dosya daha ekleyip içersine istenilen HTML kodlarını yazıyorsunuz. Gerekiyorsa LeftMenu.jsp adında bir jsp dosyası daha ekleyip sonra index.jsp yani anasayfamıza geliyoruz şimdi bunları index.jsp içine tek tek ekleyip dosya üzerinden kullanılmasını sağlayacağız. PHP gibi yani. 🙂  Aşağıdaki gibi sayfaların içersine tek tek <jsp:include page=”header.jsp”/> tagını kullanarak istediğimiz alanların farklı sayfalar üzerinden tek bir sayfada gösterilmesi işlemini gerçekleştirebiliyoruz.

[codebox 2]

İşte böyle 🙂 Masterpage kadar güzel olmasada bu da bir yöntem 🙂

Umarım Yararlı Olur. 😀

Bilgiyle Kalın

M.Zeki Osmancık

 

Java JSP Projesi Oluşturmak 452 302 mezo

Java JSP Projesi Oluşturmak

Merhaba arkadaşlar

İşim gereği biraz Java ile uğraşmam gerektiğinden Java ile alakalı yazılarda paylaşmaya başlayacağım sizlerle. Bu yazıda sizlere JSP projesi nasıl oluşturulur çalıştırılır resimlerle anlatmak istiyorum.

Önce Eclipse lazım bize hemen Eclipse i indirebileceğimiz linke  gidiyoruz ve download ediyoruz 🙂

01

Zip dosyasının içindeki eclipse klasörünü çıkarın.

02

Exe sinden Eclipse i çalıştırın

04

Bir workspace belirleyin ki Eclipse projelerinizin hepsini oraya kaydetsin 😉

005

Eclipse açıldığına göre şimdi proje açıp işimize bakabiliriz 🙂  Şimdi File menüsünden “New” o sekmeden de “Other” seçeneğini seçiyoruz (yada Ctrl+N kısayoluda işimizi görür)

06

Yeni Proje penceresinde Dynamic Web Project  seçmemiz gerekiyor eğer bu projeyi göremiyorsanız kötü haber yanlış Eclipse versiyonunu indirmişsiniz demektir 🙂 hemen JAVA EE versiyonunu indirmeniz gerekiyor 🙂

07

İlk JSP projesi olduğu için Eclipse TomCat ile ilgili birşey kurmuyor yada oluşturmuyor o yüzden Target  RunTime boş geliyor. Aktif etmemiz gerekiyor. 😉

08

New Runtime butonuna tıkladığınızda dikkat etmemiz gereken küçük bir tik var. Create a new local server i işaretlemeyin 

09

Tomcat i indirip kurmuş olduğunuzu farzederek devam ediyorum 🙂 kurmadıysanız hemen kurun hemen 🙂

TomCat i nereye kurmuşsanız bir önceki pencereden seçtiğiniz versiyonun nerede kurulu olduğunu göstermeniz gerekiyor 😉

10

Bu işlemden sonra artık  New Dynamic Web Project kısmında görüntülenmeyen Target Runtime da TomCat bir seçenek olarak görüntülenecek.

11

Artık Finish butonu ile birlikte projemizi görüntüleyebiliriz 😉

12

 

Projemiz bomboş bizi karşılıyor ve bundan sonrasında sayfalarımızı eklememiz gerekiyor hemen WebContent  klasörü üzerine sağ tık New ile bir JSP dosyası eklememiz gerekiyor 🙂

13

14

 

Ana sayfa olmasını istiyoruz o halde index ismini kullanmalıyız 😉 Bu pencerede nereye ekleneceğini seçip ardından ismini belirledikten sonra Finish  butonuna basmıyorsunuz. Next ile devam ediyoruz.

15

New JSP File(html) seçiyoruz  ve Finish ile JSP dosyamızı oluşturmuş oluyoruz 😉  index.jsp vatana millete hayırlı olsun 😉

16

Sayfam açıldığına göre nasıl çalıştığı ile ilgili bir bilgi olacağından çok basit şekilde nasıl çalıştığını göstereyim.

17Tamamdır çok basit bir toplama işlemi ile nasıl kod yazacağımızı görmüş olduk 😀  Şimdi çalıştırma vakti geldi bakalım nasıl görünüyor 🙂

18

Çalıştır butonuna bastıktan sonra Run As penceresi üzerinden “Run on Server” seçilerek OK butonu ile devam ediyoruz.

19

Localde kendi makinamız üzerinde yeni bir TomCat server oluşturuyoruz.

20

Projemiz oluşturduğumuz TomCat server üzerinde build edilmeye başlayacak ve index.jsp dosyamız bilgisayarımızdaki Eclipse üzerinde görüntülenmeye başlayacak. Yazdığımız koda göre ekranda 4 görüyorsak dinamik bir web sayfasına ilk adımı attık demektir. 🙂

21

Şimdi browser üzerindede görüntüleyelim ve toplama işlemimizin sonucunu görelim 😉

22

Browserdaki kaynak kodlara bakarsak buradada sadece 4 olduğunu yazdığımız kodların görüntülenmediğini görüyoruz 😉

24

Son olarak server i durdurarak işlemimize son veriyoruz 🙂

25

Hayırlı ve uğurlu olsun ilk JSP uygulamamızı yapmış olduk 🙂

Umarım yararlı olur

Bilgiyle Kalın

M.Zeki Osmancık

 

 

Training – ASP.NET MVC 4 Application Development 376 292 mezo

Training – ASP.NET MVC 4 Application Development

Hello my fellow Padawans  

I found this complete set of ASP.Net MVC 4 training and i thought that it will be so useful for everyone. Its from pluralsight but you don’t need to login or sign up to web site. I watched all of it and I really like style of Scott Allen. Here’s the content of this training.

77-asp-net-mvc-4-codingcluster-745669
  • Introduction
  • Web Installer
  • The Tools
  • New Project
  • Modules, Views, Controller
  • Making Changes
  • Unit Testing
  • JavaScript and CSS
  • Summary

Click Here for watch Videos 

Stay with force

Mezo

String Char Dizisidir! 920 300 mezo

String Char Dizisidir!

Merhaba arkadaşlar
Çalıştığım şirkette bulunmuş olduğum proje için Senior yani 2 3 yıl deneyimi olan developer arkadaşlar arıyoruz ve bunun ile ilgili müdürüm mülakat görüşmelerine benimde girmemi rica etti bende seve seve kabul ettim. Mülakatta gelen arkadaşlara neler yaptığını sorduğumuzda herkes güzel güzel anlatıyor yaptıklarını iş görüşmesinde göze girmek için hepimizin yaptığı gibi herşeyi anlatıyor anlatmaya gayret ediyor. Ancak

Dikkatimi çeken bir konu var ki işte oda bu yazıyı sizlerle paylaşmak isteyişimin asıl sebebi : Senior olarak alınacak ve daha önce bir çok projede görev almış olan arkadaşlar çok çok çok basit bir sorudan elendiklerinin veya olumsuz bir not aldıklarının farkında değiller. String bir değişken içindeki karakterlerin sayılması ve işlem yapılması ile ilgili bir sorumuz var ve burada herkese hiçbir string metot vs kullanmayın diye de uyarıyoruz tahmin ettiğiniz gibi basit küçük bir algoritma sorusu.
Ne var bunda diyebilirsiniz işte konu bu zaten 🙂 arkadaşların hiç biri string bir char dizisidir deyip bu şekilde foreach ile veya for ile kodunu kağıda dökmeye başlamadı. Herkes bir ipucu verilmesini bekliyor yada farklı yollarla bir array e çevirme işine giriyor.Halbuki ismini yazarken bile aslında bir karakter dizisi kullandığının farkında bile değil.
Küçük ayrıntılar veya bilgiler hayat kurtarır yada iyi yerlere getirebilir.

Unutmayın  String bir Char dizisidir.

Umarım Yararlı Olur ve bunu okuyan arkadaşlar mülakatlarda başvurdukları güzel iş yerlerine sevdikleri işleri yapmak üzere girebilirler.

Bilgiyle kalın

M.Zeki Osmancık

SOLID OOP Prensipleri 511 409 mezo

SOLID OOP Prensipleri

Merhaba arkadaşlar
Bu yazımda sizlerle OOP yazarken dikkat etmemiz gereken OOP yi gerçek anlamıyla programlarımıza veya web sitelerimize uygulama aşamasında nelere dikkat etmeliyiz bu konyu işleyen SOLID OOP Prensipleri ile ilgili küçük bir bilgilendirme yapacağım
OOP yi herkes bilir az çok anlatır veya basit yöntemlerle uygular yada uyguladığını sanar. Halbuki OOP programlama yaparken bir takım prensipler uygulanmalıdır. Bu prensiplerin baş harflerinden oluşan bir keyword var elimizde. SOLID
Solid 5 ayrı prensibin birleşmiş halidir ve OOP yaparken uygulamamız gereken kurallardan bahsederler. Hadi bakalım bu akrostiş şiir tadındaki prensipler neymiş görelim:
1- Single Responsibility Principle
2- Open/Closed Principle
3- Liskov’s Substitution Principle
4- Interface Sergregation Principle
5- Dependency Inversion Principle
İlk madde ile başlayalım küçük açıklamalar yapmaya.
1. Single Responsibility Principle : Bu prensibe göre bir metot, sınıf,nesne vb. yapıların yanlızca bir tane görevi olur. Bir metot, sınıf,nesne vb. değiştirmek için yanlızca bir sebebimiz olmalıdır. Birden fazla nedenimiz varsa bir yanlışlık var ve bu prensibe uymuyoruz anlamına gelir. Amaç her metot, sınıf,nesne vb. yapıya tek bir görev tek bir sorumluluk yüklemektir.
2. Open/Closed Principle : Yazmış olduğunuz metot, sınıf,nesne vb. yapılar geliştirmeye açık ancak değiştirmeye kapalı olmalıdır. Bu ne demektir peki: yazmış olduğunuz kod asla değiştirilmemelidir yanlızca üzerine eklemeler yapılmalıdır. Kodlarımızı yazarken bu şekilde dizayn etmeliyiz.
3. Liskov’s Substutions Principle : Bu prensibe göre alt sınıflardan elde ettiğiniz bir nesne ile üst sınıftan elde edilen nesne yer değiştirirse bu değişim kesinlikle ve kesinlikle aynı davranışa sahip olmalıdır. Yani örnekleyecek olursak OOP anlatırken hep bahsettiğimiz bir örnek olan CANLI sınıfımız olsun ve bu CANLI adındaki sınıfımız INSAN ve HAVYAN adlı iki sınıfa kalıtım vermiş olsun. Bu prensipte anlatılmaya çalışılan şey eğer ben bir işlemde CANLI sınıfını kullanıyorsam ve işlemlerim başarılı oluyorsa INSAN veya HAYVAN sınıfından aldığım örnekler ilede aynı işlemleri başarılı olarak gerçekleştirebilmeliyim içersinde bunu engelleyecek başka metot, sınıf,nesne vb. yapılar bulunmamalı demek istiyor.
4. Interface Sergregation Principle : Prensip olarak aynı özelliklere sahip olan sınıfları tek bir interface de toplamak sonradan o sınıfların hepsinde kesin olarak kullanılmayacak olan başka metot, sınıf,nesne vb. yapıları bu interface içersine eklemek doğru değildir. Ilk başta belki bir çözüm olabilir ama prensip olarak yanlıştır. Çözüm ise interface ‘leri parçalamaktır. Kesin olarak kullanılacak olan ortak metot, sınıf,nesne vb. yapıları ayrı ayrı interface ler içersinde toplayarak sınıflara implement etmektir.
5. Dependency Inversion Principle : Somut sınıflara olan bağımlılığı soyut sınıflar veya interface ler ile ortadan kaldırmaktır. Yani bir servis sınıfımız var ve bu servis sınıfı DB işlemleri ile ilgili işlemler gerçekleştiriyor. Başka bir A sınıfı üzerinden bu Servis sınıfına bağ kurup işlemlerimizi gerçekleştirirken ürettiğimiz A sınıfımız içersinde servis sınıfının bir çok örneği alınacak ve bir çok yerde kullanılabilecek ve kodlarımızı değiştirirken bağlı olan kısımlarda değişecek yada servis sınıfında yapılan bir değişiklik bizim servisi kullanan A sınıfımızdada değişikliklere sebep olacak . Amaç bu bağımlılığı ortadan kaldırmak ve daha güzel bir kod ortamı sağlamak.
Bu prensiplerde kod yazmak zorunlu olarak yapmanız gereken bir şey değil ama bu şekilde yazmanın tek bir amacı var daha az hata daha güzel kodlar 😀
Bilgiyle Kalın
M.Zeki Osmancık

Design Patterns (Tasarım Deseni) Nedir ? 1024 777 mezo

Design Patterns (Tasarım Deseni) Nedir ?

Merhaba arkadaşlar
Konumuz Design Pattern 🙂 Biliyorum bir çok kişi bu konu hakkında birşeyler yazmıştır ancak birde ben yazayım dedim. Benim blogumda neden design pattern yok ben neden yazmıyorum dedim 🙂 ve işte Design Pattern…
Design Pattern genel olarak yazılım tasarımı sürecinde sürekli karşılaşılan problemlere çözümler üreten hazır kalıplardır. İstenilen herhangi bir yere yerleştirildiğinde çalışan hazır tasarımlar değildirler. İşin aslı problemler için bulunan çözümlere yapılan açıklamalardır
OOP(Object Oriented Programming) prensipleri doğrultusunda oluşturulan sınıfların başka sınıflara bağımlılığının en aza indirgenmesi beklenir. Bu durum esnek bir yapıyı beraberinde getirir ve yazılımın kalitesi artar. İleride gerekecek geliştirmelere daha müsait bir yapı sağlamış olur. Bu yapı, yazılımcıya ve o yazılımcıdan sonra gelecek yazılımcıya zamandan ve iş gücünden ciddi manada tasarruf sağlar.
Tasarım şablonları aşağıda yer alan ortak özelliklere sahiptir:

  • Edinilen tecrübeler sonunda ortaya çıkmışlardır.
  • Amerikanın tekrar tekrar keşfedilmesini engeller 😀 .
  • Tekrar kullanılabilir kalıplardır.
  • Ortak kullanılarak daha büyük problemlerin çözülmesine katkı sağlarlar.
  • Devamlı geliştirilerek, genel bir çözüm olmaları için çaba sarfedilir.

Tasarım şablonları değişik kategorilere ayrılır. Bunlar:

  • Oluşturucu tasarım şablonları (creational patterns)
  • Yapısal tasarım şablonları (structual patterns)
  • Davranışsal tasarım şablonlar (behavioral patterns)

Oluşturucular

  • Abstract Factory
  • Builder
  • Factory Method
  • Prototype
  • Singleton

Yapısal

  • Adapter
  • Bridge
  • Facade
  • Decorator
  • Composite
  • Flyweight
  • Proxy

Davranışsal

  • Command
  • Memento
  • Strategy
  • Iterator
  • State
  • Chain Of Responsibility
  • Mediator
  • Observer
  • Template Method
  • Visitor

Bu desenlerin yanlızca çok çok basit açıklaması. Yukarda saydığım desenleri tek tek açıklamayı planlıyorum 🙂 Zaman buldukça yazıyor olacağım. Sizlerde beni bekliyor olun 😀
Bilgiyle Kalın 😉
M.Zeki Osmancık

C# Dynamic Nesnesi 350 106 mezo

C# Dynamic Nesnesi

Merhaba arkadaşlar
Bu yazımda C# daki yeni bir keyword’ den bahsetmek istiyorum DYNAMIC.
Dynamic keyword u C# 4.0 ile birlikte 2010 da gelen bir keyword. Bu keyword Dynamic Language Runtime (DLR) yi yönetir DLR dediğimiz olay tıpkı CLR (Common Language Runtime) gibi çalışan bir yapıdır. Dynamic bir nesne Dynamic tipindeki classların yönetiminin nasıl yönetileceğini belirler. Tıpkı CLR de olduğu gibi tamamen runtime da derlenir ve çalışırlar.

Diyelim ki iki farklı class oluşturmak istiyoruz ancak içersinde aynı isimden 2 metot olacak daha sonra söz konusu Dynamic sınıfdan bir instance alıyorsunuz. Dynamic nesne ile aynı isimdeki ancak farklı classlar içersindeki metotları çağırabiliyorsunuz.

Bir de örneğe göz atalım 😀

Örnek

Çıktı da Şöyle oluyor şekil örnek 1 A 😀

output

DataTable ‘dan List e Dönüştürme 342 204 mezo

DataTable ‘dan List e Dönüştürme

Merhaba arkadaşlar

Bu yazıda sizlere DataTable ile gelen veriyi List<T> olarak geri döndürmek istersek bu dönüştürmeyi LambdaExpressions /LINQ ile nasıl yapabiliriz ondan bahsetmek istiyorum.

Umarım Yararlı Olur
Bilgiyle Kalın
M.Zeki Osmancık

Service ‘IISADMIN’ (IISADMIN)failed to start Hatasının Giderilmesi 671 389 mezo

Service ‘IISADMIN’ (IISADMIN)failed to start Hatasının Giderilmesi

Merhaba arkadaşlar
Bu yazımda başıma gelen 3 gün beni uğraştıran bir hata ile karşınızdayım 🙂 3 gün uğraşılmayacak bir hata aslında ama yanlış tarafa focus olunca mecburen bu yönde araştıma yapıp sonuca ulaşamadım ancak sonunda buldum 🙂
Herkesin sık kullandığı bir alışveriş sitesinin projesi için görevlendirildim ve bilgisayarıma önce Commerce Server 2007 kurup daha sonra Commerce Server 2009 a yükseltmem gerekiyordu. Commerce Server 2007 kurarken bir uyarı veriyor bu uyarı şöyle : “Service ‘IISADMIN’ (IISADMIN)failed to start”. Verify that you have sufficient privileges to start system services”. Bu hatayı Ignore seçeneği ile geçebiliyoruz. Geçmeyin sakın !!!😀
Eğer bu hatayı Ignore ile geçerseniz Commerce Server 2009 kurulurken Fatal Error hatası alıp bu hata genel bir hata çözüm aradığınızda bir çok alakasız kaynak çıkıyor. İşte bu Fatal Error e odaklandığım için 3 gün uğraştım 🙂
Ancak asıl sorun ISSADMIN hatası bunu çözmemiz gerekiyormus aslında 🙂 Şimdi nasıl çözdüğümü anlatayım.

Commerce Server için IIS kurulması şart bunu Program Ekle Kaldır dan Windows Özelliklerinden ekleyebilirsiniz. Sadece Internet Information Service i işaretleyip devam ederseniz (benim gibi) ISSADMIN hatasını alırsınız 😀 Bu hatayı almamak için IIS kurarken altındaki seçeneklerde yer alan IIS 6 Management Compatibility Pack da işaretli olmalı böylelikle Commerce Server kurulurken çıkan IISADMIN hatasını ve dolayısı ile Commerce Server 2009 da ki Fatal Error u de engellemiş oluyorsunuz 🙂
Umarım Yararlı Olur
Bilgiyle Kalın
M.Zeki OSMANCIK

HttpCookie Nedir ? 279 180 mezo

HttpCookie Nedir ?

Merhaba arkadaşlar
HttpCookie yapısından önce çok temel bilgi olarak Cookie nedir ondan bahsedelim 🙂
Cookie Nedir?
Bir web sayfası sunucusunun sizin bilgisayarınızın hard diskine yerleştirdiği ufak bir text dosyasıdır. Yani, o web sitesinin bir sonraki ziyarette sizi tanıması için geçerli bir bilgidir. Bu text dosyası bir komut dosyası olmadığı gibi, virüs de değildir. Size özel bir tanımlamadır ve sadece bu kodu tanımlayan web sunucusu tarafından okunabilir.Cookie’nin amacı; sizin o siteyi yeniden ziyaret ettiğinizi web sunucuya bildirmekten ibarettir.

HttpCookie Nedir?
Asp.Net ile yaptığımız sitelerimizde Cookie oluşturmak için kullandığımız bir class tır. Cookie nin yönetimini HttpRequest ve HttpResponse class ile gerçekleştirilir.
HttpCookie yi oluşturmak için

HttpCookie MyCookie = new HttpCookie("Cerezim");

Instance alındıktan sonra içersindeki property leride şu şekilde kısaca açıklayabiliriz.
Domain: Cookie nin etki alanını ayarlamak için kullanılır.
Expires: Cookie nin geçerlilik süresini ayarlamak için kullanılır DateTime tipinde değer alır.
HasKeys: Cookie içersinde alt anahtarlar olup olmadığını kontrol etmek için kullanılır.
HttpOnly: Cookie ye client tarafından javascript kodları tarafından ulaşılabilir olmasını sağlayan bir property dir.
Item: HttpCookie.Values özelliği için bir kısayoldur. Bu özellik Active Server Pages (ASP) nin önceki sürümleriyle uyumluluk sağlamak için kullanılır.
Name: Cookie ye bir isim verir veya cookie ismini okuyabilidiğimiz property.
Path: Cookie nin sanal adresini atayıp okuyabildiğimiz property
Secure:SSL uzerinden kullanilacak olan cookie ler ile ilgili guvenlik degerlerinin atandigi property dir.HTTPS uzerinden kullanilabilir
Value:Cookie içersine yerleştirilecek olan değeri atamak için kullanılır.
Values: Cookie içersine birden fazla değer atayabilmek için kullanılır.

Cookie tanımlayabilmek için HttpCookie sınıfından bir örnek alıp şu şekilde kullanabiliriz.

HttpCookie MyCookie = new HttpCookie("Cerezim");
MyCookie = Request.Cookies.Get("Cerezim");
if(MyCookie!=null)
{
Response.Write(MyCookie.Value);
}

Simdilik bu kadar daha sonraki yazilarda ayrintili sekilde nasil cookie tanimlayip kullanabiliriz ornek proje ile destekleyip gosterecegim.
Umarim yararli olur
Bilgiyle Kalin
M.Zeki OSMANCIK

C# ve PHP 3DESCrypto 691 618 mezo

C# ve PHP 3DESCrypto

Merhaba arkadaşlar
Bu kez sizlere şifreleme yöntemi olan 3DES(Triple Data Encryption Algorithm diye geçer ancak DES kısaltması Data Encryption Standard dan gelmektedir.) şifreleme yönteminin kodlarını vermek istiyorum belki bu yazıya daha sonra ayrıntılı şekilde bunun ne olduğu ile ilgilide birşeyler ekleyebilirim. 🙂 PHP ve C# için kodları aşağıda sizlerle paylaşıyorum
PHP

function encrypt($string) {
//Key
$key = "xxxxxxxx";

//Encryption
$cipher_alg = MCRYPT_TRIPLEDES;

$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,MCRYPT_MODE_ECB), MCRYPT_RAND);

$encrypted_string = mcrypt_encrypt($cipher_alg, $key, $string, MCRYPT_MODE_ECB, $iv);
return base64_encode($encrypted_string);
return $encrypted_string;
}

function decrypt($string) {
$string = base64_decode($string);

//key
$key = "xxxxxxxx";

$cipher_alg = MCRYPT_TRIPLEDES;

$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,MCRYPT_MODE_ECB), MCRYPT_RAND);

$decrypted_string = mcrypt_decrypt($cipher_alg, $key, $string, MCRYPT_MODE_ECB, $iv);
return trim($decrypted_string);
}

C# encryption:

using System;
using System.Security.Cryptography;
using System.Text;

public class Crypto3DES
{
public Crypto3DES()
{

}

private System.Text.Encoding encoding;

public string Key
{
get
{
return "xxxxxxxx";
}
}

public System.Text.Encoding Encoding
{
get
{
if( encoding == null )
{
encoding = System.Text.Encoding.UTF8;
}
return encoding;
}

set
{
encoding = value;
}
}

public string Encrypt3DES( string strString )
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();

DES.Key = Encoding.GetBytes( this.Key );
DES.Mode = CipherMode.ECB;
DES.Padding = PaddingMode.Zeros;

ICryptoTransform DESEncrypt = DES.CreateEncryptor();

byte[] Buffer = encoding.GetBytes(strString);

return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
}

public string Decrypt3DES( string strString )
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider ();

DES.Key = Encoding.UTF8.GetBytes( this.Key );
DES.Mode = CipherMode.ECB;
DES.Padding = PaddingMode.Zeros;
ICryptoTransform DESDecrypt = DES.CreateDecryptor();

byte[] Buffer = Convert.FromBase64String(strString);
return UTF8Encoding.UTF8.GetString( DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length) );
}
}

Umarım Yararlı Olur
Bilgiyle Kalın
M.Zeki Osmancık

PHP MyAdmin Import Dosya Boyutu Hatası 320 220 mezo

PHP MyAdmin Import Dosya Boyutu Hatası

Merhaba arkadaşlar
Sizlere biraz önce karşılaştığım bir sorunun çözümünü paylaşmak istiyorum. kendi bilgisayarıma Wamp server kurdum ve var olan bir veritabanının script dosyasını yüklemeye çalıştım ancak bir hata ile karşılaştım.

Aldığım hata :No data was received to import. Either no file name was submitted, or the file size exceeded the maximum size permitted by your PHP configuration. See FAQ 1.16.

Yüklenen dosyanın boyutunun büyük olduğu ile alakalı bir hata. Çözümü ise çok basit php.ini dosyanızı açıyorsunuz ve içersinde upload_max_filesize = 2M yazar 2 yerine 128 yazın ve kaydedip kapattıktan sonra php servislerini yeniden başlatın tekrar denediğiniz de boyutu büyük olan script dosyası başarıyla import edilecektir. 🙂

Umarım faydalı olur.

Bilgiyle Kalın

M.Zeki Osmancık

ASP.Net Türkçe Karakter Sorunu 962 192 mezo

ASP.Net Türkçe Karakter Sorunu

Merhaba arkadaşlar

ASP.Net türkçe karakter sorunu ile ilgili küçük bir bilgi vermek isterim 🙂 Eğer asp.net sayfanızda türkçe karakter sorunu yaşıyorsanız Aşağıdaki kodu “webconfig” sayfanızdaki “<system.web>” tagı altına yapıştırmanız yeterli olacaktır… 😉


 

Bilgiyle Kalın 😉

M.Zeki Osmancık

Microsoft CRM Online Dil Desteklerinin Ayarlanması 703 405 mezo

Microsoft CRM Online Dil Desteklerinin Ayarlanması

CRM de Dil Desteklerinin Ayarlanması

CRM üzerinde kullanılacak olan dillerin ayarlanabilmesi için . CRM de bulunan Ayarlar kısmında ki Yönetim seçeneği üzerindeki Diller linkine tıklandıktan sonra çıkan listede kullanıcıların kullanabilecekleri dillerin işaretlenip kapatılması gerekmektedir. böylelikle birden fazla dil desteği CRM üzerine eklenmiş olur
52bc47048c6014599257494618c492ae

 

Umarım Yararlı Olur

Bilgiyle Kalın

M.Zeki Osmancık

 

PHP’ de WCF Servis Çalıştırmak 800 421 mezo

PHP’ de WCF Servis Çalıştırmak

Merhaba arkadaşlar

WCF Servisi yazdık yayınladık. C# tarafında nasıl kullanmamız gerektiği zaten basit olarak servisin üzerindeki örnek kısmında yazıyor. Bu yazıda .Net de yazdığımız bir metodun farklı bir platform olan PHP tarafında nasıl kullanacağımızı kısaca göstermek istiyorum.  Öncelikle kodlara geçmeden önce belirtmeliyim ki server üzerinde SOAPCLIENT kurulu olmalı eğer kurulu olmazsa WCF servisi kullanamazsınız.

WCF Servis tarafında aşağıdaki gibi bir metot yazdım

    public string AddAccount(string yetkiliAd,string yetkiliSoyad,string firmaAdi,string firmaAdresi){

return string.Format(“You entered: {0}”, yetkiliAd+yetkiliSoyad+firmaAdi+firmaAdresi);

}

Şimdi gelelim PHP kodlarına basit olarak kodlar şöyle:

// SOAP client WCF servis e bağlanmamızı sağlayan bir class ve WCF servis üzerindeki metotların çalıştırılmasını sağlar.
$wsdl = ‘http://servisadresi/ServisKlasoru/Service.svc?wsdl’;
$soapClient = new SoapClient($wsdl, array(‘cache_wsdl’ => 0));// Yazılan WCF servis üzerinde AddAccount adında bir metot var ve onun içersine parametreleri gönderiyoruz.
$AccountParameter = new stdClass();
$AccountParameter->yetkiliAd = addslashes($this->ucwords_tr($_POST[Ad]));
$AccountParameter->yetkiliSoyad = addslashes($this->ucwords_tr($_POST[Soyad]));
$AccountParameter->firmaAdi = addslashes($this->ucwords_tr($_POST[FirmaUnvan]));
$AccountParameter->firmaAdres = addslashes($this->ucwords_tr($_POST[FirmaAdres]));
try
{
// ve WCF servis üzerindeki AddAccount metodunu çalıştırım sonucu bir değişkene aktarıyor.
$result = $soapClient->AddAccount($AccountParameter);
}
catch (SoapFault $fault)
{
//echo “Fault code: {$fault->faultcode}” . NEWLINE;
//echo “Fault string: {$fault->faultstring}” . NEWLINE;
if ($soapClient != null)
{
$soapClient = null;
}
exit();
}
$soapClient = null;

//echo ”

\n”;

//print_r($result);

//echo ”

\n”;

//echo “Return value: {$result->AddAccountResult}” . NEWLINE;

Umarım yararlı olmuştur 😉

Bilgiyle Kalın

M.Zeki Osmancık

WCF Service IIS Ayarları 1024 575 mezo

WCF Service IIS Ayarları

Merhaba arkadaşlar

Bir önceki yazıda WCF servisin ne olduğu ile alakalı bilgi vermiştim şimdi ise yazdığımız bir servisin IIS üzerinde nasıl yayınlanacağı üzerinde duralım. Öncelikle yayın yapacağımız server üzerinde IIS yüklü olması gerekmekte. IIS üzerinden bazı ayarlar yapacağız ve dosyalarımızı yerleştirip yayına başlayacağız.

Dosyalar demişken WCF Service projesini yazıp tamamladıktan sonra projeyi Publish etmemiz gerekiyor. Publish işlemi servisi yayına hazırlamak anlamına geliyor ve yapmasıda çok basit sadece projeniz üzerinde sağ click sonra publish seçmeniz yeterli.

Şimdi server üzerinde IIS Yöneticisini açıyoruz.

1

 

Daha sonra kullanacağımız Framework versiyonunda bir Application Pool ekliyoruz

2

 

Bizim servisimiz .Net Framework 4.0 kullandığı için uygulama havuzumuz Framework 4.0 seçip oluşturuyoruz.

3

Bu uygulama havuzu içersinede bir web sitesi ekliyoruz ki yayınlayacağımız servisimizi içersine yerleştirebilelim 🙂
4

 

Bu websitesinin yayınlanacağı fiziksel adresi seçmemiz gerekiyor.

5

6

 

 

7

 

Web sitesini ekledikten sonra ve fiziksel yolunu belirttikten sonra eklediğimiz web sitesine bir Application (uygulama) ekliyoruz.

8

 

Uygulamamız içinde aynı şekilde bir fiziksel yol seçtikten sonra yayına hazırız.

9

 

Artık servisimiz yayına hazır tek yapmamız gereken server in adresini yazmak ve belirttiğimiz servisin klasör adı ve dosya adını yazıp servisimizi görüntülemek 😉

http://serveradres veya ip adresi/ServisKlasoru/Service.svc

Untitled picture

 

Umarım yararlı olur

Bilgiyle Kalın

M.Zeki Osmancık

WCF Service Nedir? 448 274 mezo

WCF Service Nedir?

Merhaba arkadaşlar

WCF Service nedir konusu üzerinde bir kaç basit açıklama yapmak istiyorum. Bilindiği gibi microsoft bugüne kadar dağıtık uygulamalarının (Distrubuted Applications) geliştirilebilmesi için  .Net Remoting, XML Web Servisleri, MSMQ,COM+ gibi sistemleri geliştirmiştir.  WCF Service de temel olarak bu sistemlerin hepsinin yeteneklerine sahip ve tam SOA (Service Oriented Architecture – Servis Yönelimli Mimari) desteü, sağlayan güçlü bir Framework API si olarak açıklanabilir.

WCF iki önemli özellik ile birlikte karşımıza çıkmakta: bunlardan birincisi Microsoft tarafındaki servislerin farklı platformlar tarafından ele alınabilmesidir (Interoperability) . Böylece karmaşık .Net tiplerini özel olarak Java ,Com gibi modelleri destekleyen platformlara dağıtabiliriz. Bu yüzdende Linuz ,Unix gibi sistemler servislerimizin birer tüketicisi olabilirler.

İkinci özellik ise Windows kısmında yapılan dağıtık modeller arasında var olacak olan entegrasyonlarının tek bir çatı altında toplanabilmesidir. Bu özellik dışında WCF Service  , CLR tiplerini birer servis olarak sunabilmemizi ve servisleri birer CLR tipi olarak kullanabilmemizi sağlayan bir mimari sunmaktadır.

WCF Service ‘e aynı makine içinde aynı process te yer alan farklı bir Application Domain üzerinden ,aynı makinede yer alan farklı bir process içindeki farklı Application Domain üzerinden , farklı bir makinedeki process içinde yer alan Application Domain üzerinden ulaşabiliriz. Client’ lar hangi Application Domain üzerinde olursa olsunlar servis ile olan iletişimlerini proxy nesnesi üzerinden sağlamak zorundadırlar.

İngilizce kaynaklarda WCF Service ‘in ABC sinden sıkça bahsedilmektedir. Bu ABC nedir alfabemi diye sorarsanız değil 😀 ABC Addresses Bindings Contracts anlamına gelen ve WCF in çekirdeğinde yer alan önemli kavramlardır.

Addresses : Bulunan her servis benzersiz bir adrese sahip olmalıdır Özellikle bir servis adresi servisin teri taşıma protokolü bilgilerinden oluşmalıdır. Servis yeri derken kastetmeye çalıştığım şeyler aslında : Bilgisayar adı, site adı i network , iletişim portu, pipe queue, URI adları ve kesin bir path adresi   olarak sıralanabilir. Burada kullanılan taşıma protokolleri ise HTTP , TCP, P2P , IPC , MSMQ olarak soralanabilir.

Contracts : Bir servisin ne iş yaptığını bilmek önemlidir. Özellikle client’ ların ihtiyaç duyduğu proxy sınıflarının yazılmasında önemli bir konudur. Bu sebeple WCF Service üzerinde tüm servisler dış ortama bir Contract sunmaktadır. Genel manada 4 tane contract tipi vardır. bunlar

Service Contract : Serviste hangi operasyonların var olduğu ile alakalı sözleşmedir.

Data Contract :Servislerden client ‘lara giden ve client ‘ lardan servise gelen veri tiplerini tanımlayan sözleşmedir. Int String gibi bilinen tipler için bu sözleşmeler Implicit yani bilinçsiz olarak hazırlanır. Ancak karmaşık tiplerde ve kendi oluşturduğumuz tiplerde Explicit olarak tanımlanmaları gerekir. Bu sayede Java vb platformlara kendi tanımladığımız sınıfı o platformların anlayacağı şekilde sunmuş oluyoruz.

 Fault Contract : Servis tarafından hangi hataların fırlatılabileceğini ve bu servisi kullanan client a bu hataların nasıl aktarılacağını tanımlayan sözleşmedir.

Message Contract : Servislerin mesajları ile iletişimini sağlayan sözleşmedir.

Bindings :Bindings temek olarak servisleri ile nasıl iletişim kurulacağını tanımlamak için kullanılırlar. Bir bindings tip  transport type , protocok ve data encoding bilgilerini bildirir. Bu bilgiler aslında servis yönelimli mimari modelde kullanılabilecek olan senaryolar düşünülerek oluşturulurlar bu yüzdende WCF bu önceden bilinen senaryoları kullanabilmek için gerekli bağlayıcı tipleri önceden bildirmiştir bunlar :

 

Binding Tipi KonfigurasyonElementi Taşıma Çeşidi(Transport Type) Veri Çözümlemesi(Data Encoding) PlatformDesteği

(Interoperability)

BasicHttpBinding <basicHttpBinding> HTTP / HTTPS Text Var
NetTcpBinding <netTcpBinding> TCP Binary Yok
NetPeerTcpBinding <netPeerTcpBinding> P2P Binary Yok
NetNamedPipeBinding <netNamedPipeBinding> IPC Binary Yok
WSHttpBinding <wsHttpBinding> HTTP/HTTPS Text/MTOM Var
WSFederationBinding <wsFederationHttpBinding> HTTP/HTTPS Text/MTOM Var
NetMsmqBinding <netMsmqBinding> MSMQ Binary Yok
MsmqIntegrationBinding <msmqIntegrationBinding> MSMQ Binary Var
WSDualHttpBinding <wsDualHttpBinding> HTTP Text/MTOM Var

Buradaki tiplerden hangisini seçeceğimiz, geliştireceğimiz SOA (Service Oriented Architecture) modelindeki ihtiyaçlarımız doğrultusunda belirlenebilirler.

Şimdi isterseniz bir WCF Service projesi açarak inceleyelim.

WCF Service projesi açtığımızda bizi karşılayan önemli 3 dosya vardır bunlar IService.cs ,Service.cs ,web.config dosyalarıdır bu dosyalarda neler var bir bakalım.

IService.cs

Bu interface servis içersinde kullanılacak olan metotları property leri ve bunların contractlarının belirtildiği dosyadır 😉

using System;using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.ServiceModel.Web;

using System.Text;

namespace WcfService1

{

// NOTE: You can use the “Rename” command on the “Refactor” menu to change the interface name “IService1” in both code and config file together.

[ServiceContract]

public interface IService1

{

[OperationContract]

string GetData(int value);

[OperationContract]

CompositeType GetDataUsingDataContract(CompositeType composite);

// TODO: Add your service operations here

}

// Use a data contract as illustrated in the sample below to add composite types to service operations.

[DataContract]

public class CompositeType

{

bool boolValue = true;

string stringValue = “Hello “;

[DataMember]

public bool BoolValue

{

get { return boolValue; }

set { boolValue = value; }

}

[DataMember]

public string StringValue

{

get { return stringValue; }

set { stringValue = value; }

}

}

}

 

 

Service.cs

Service.cs ise işlemlerimizin IService.cs dosyasındaki gibi tanımlanmış olan metotlar içersine yazacağımız dosyamızdır.

using System;using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.ServiceModel.Web;

using System.Text;

namespace WcfService1

{

// NOTE: You can use the “Rename” command on the “Refactor” menu to change the class name “Service1” in code, svc and config file together.

// NOTE: In order to launch WCF Test Client for testing this service, please select Service1.svc or Service1.svc.cs at the Solution Explorer and start debugging.

public class Service1 : IService1

{

public string GetData(int value)

{

return string.Format(“You entered: {0}”, value);

}

public CompositeType GetDataUsingDataContract(CompositeType composite)

{

if (composite == null)

{

throw new ArgumentNullException(“composite”);

}

if (composite.BoolValue)

{

composite.StringValue += “Suffix”;

}

return composite;

}

}

}

 

Web.config

<?xml version=”1.0″?><configuration>

<system.web>

<compilation debug=”true” targetFramework=”4.0″ />

</system.web>

<system.serviceModel>

<behaviors>

<serviceBehaviors>

<behavior>

<!– To avoid disclosing metadata information, set the value below to false before deployment –>

<serviceMetadata httpGetEnabled=”true”/>

<!– To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information –>

<serviceDebug includeExceptionDetailInFaults=”false”/>

</behavior>

</serviceBehaviors>

</behaviors>

<serviceHostingEnvironment multipleSiteBindingsEnabled=”true” />

</system.serviceModel>

<system.webServer>

<modules runAllManagedModulesForAllRequests=”true”/>

<!–

To browse web app root directory during debugging, set the value below to true.

Set to false before deployment to avoid disclosing web app folder information.

–>

<directoryBrowse enabled=”true”/>

</system.webServer>

</configuration>

 

Umarım yararlı olur.

Bilgiyle Kalın

M.Zeki Osmancık

 

Windows 8 Store Apps Using Localization 935 590 mezo

Windows 8 Store Apps Using Localization

Hi Friends
In this article i want to explain about localization on Windows Store Apps. If you built an application and want to make this application world wide, you have to add multi-language in your application.
So lets start the sample about using localization on Windows Store Applications.
First of all we need to add *.resw files to project. This file is string resource files and we need to add resw file for every language.

I added 3 *.resw file in my project for English German and Turkish languages in different folders with same name.

Then i modifying my *.resw files for every language:
Resources.resw file in ”en” folder

Resources.resw file in ”gr” folder

Resources.resw file in ”tr” folder

In my MainPage.xaml page i place 1 combobox 3 TextBlock and 2 Textbox.

 

<Pagex:Class=”localizationsample.MainPage”xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

xmlns:local=”using:localizationsample”

xmlns:d=”http://schemas.microsoft.com/expression/blend/2008″

xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006″

mc:Ignorable=”d”>

 

<Grid Background=”{StaticResource ApplicationPageBackgroundThemeBrush}”>

<TextBlock Name=”txtUserName” HorizontalAlignment=”Left” Margin=”316,304,0,0″ TextWrapping=”Wrap” Text=”User Name” VerticalAlignment=”Top” FontSize=”36″/>

<TextBlock Name=”txtPassword” HorizontalAlignment=”Left” Margin=”316,353,0,0″ TextWrapping=”Wrap” Text=”Password” VerticalAlignment=”Top” FontSize=”36″/>

<ComboBox Name=”cmbLanguage” HorizontalAlignment=”Left” Margin=”591,38,0,0″ VerticalAlignment=”Top” Width=”205″ SelectionChanged=”ComboBox_SelectionChanged_1″/>

<TextBlock HorizontalAlignment=”Left” Margin=”381,38,0,0″ TextWrapping=”Wrap” Text=”Choose Language” VerticalAlignment=”Top” FontSize=”22″/>

<TextBox HorizontalAlignment=”Left” Margin=”553,304,0,0″ TextWrapping=”Wrap” VerticalAlignment=”Top” Width=”333″/>

<TextBox HorizontalAlignment=”Left” Margin=”553,353,0,0″ TextWrapping=”Wrap” VerticalAlignment=”Top” Width=”333″/>

 

</Grid>

</Page>

 

 

 

Write very simple code for add items in combobox.

cmbLanguage.Items.Add(“en”);cmbLanguage.Items.Add(“tr”);cmbLanguage.Items.Add(“gr”);

When you select a language on combobox ,language file will change. For doing this process we must write some code on combobox selectionChanged event.

var context = new ResourceContext();var selectedLanguage = cmbLanguage.SelectedItem;if (selectedLanguage != null){var lang = new List<string>();lang.Add(selectedLanguage.ToString());

context.Languages = lang;

var resourceStringMap = ResourceManager.Current.MainResourceMap.GetSubtree(“Resources”);

this.txtUserName.Text = resourceStringMap.GetValue(“string1”, context).ValueAsString;

this.txtPassword.Text = resourceStringMap.GetValue(“string2”,context).ValueAsString;

}

ResourceContext reads the *.resw files. If we read our language files we can read ids of contents and call them where ever we want.

Our language changer is ready just test.

I hope that is helpful

May the knowledge be with you

M.Zeki Osmancık

Linq To SQL _ Insert Update Delete 570 571 mezo

Linq To SQL _ Insert Update Delete

Merhaba arkadaşlar

Bir önce ki makalede sizlere LinqToSql ile nasıl Select sorguları çalıştırabileceğiniz ile ilgili bazı bilgiler vermiştim. Bu sefer ise Insert Update ve Delete işlemleri ile ilgili bazı bilgiler vermek istiyorum. Projemiz içersine dbml dosyasını eklediğimizi varsayarak devam etmek istiyorum. Daha önceki örnekteki form tasarımına ek olarak sadece 3 Button 2 Textbox ve Label nesnelerini ekleyip bu tasarım üzerinden devam edeceğim.

Insert

Insert işlemini gerçekleştirebilmek için Kaydet butonumuzun Click olayı içersine sadece şu kodları yazmamız yeterli olacaktır.

NorthwindDataContext db = new NorthwindDataContext();
Category eklenecek = new Category();
eklenecek.CategoryName = TextBox1.Text;
eklenecek.Description = TextBox2.Text;
db.Categories.InsertOnSubmit(eklenecek);
db.SubmitChanges();
Doldur();

Bu işlemde bir dataContext örneği oluşturduktan sonra Northwind üzerine insert işlemi için gerekli olan alanları belirttiğimiz Category tipindeki nesneyi doldurup bu nesneyi tüm bilgileri ile birlikte kaydetmesini söylüyoruz.

Güncelleme ve silme işlemlerinden önce ufak bir noktaya değinmek sanırım yerinde olacaktır. SQL sorgularında yaptığımız gibi bizim burada mutlaka bir ID vermemiz gerekiyor yani güncellemek istediğimiz verinin kesin adresini yolunu belirtmeliyiz. Biliyorsunuz ki SQL kodları ile Update veya Delete komutları yazdığınızda “Where” ile ID sini belirtmezseniz tüm kayıtlar için güncelleme veya silme işlemini gerçekleştirir. Bu yüzden önce nasıl ID belirtiriz ona bakalım.  ID yazan yere 3 5 yazmayacağız tabi ki. DataGridView üzerinden bir veri seçip onu yerleştirdiğimiz Textbox ve Label lar üzerine yazdırdıktan sonra işlemlerimize devam edeceğiz.

Kayıt Seçme İşlemi

Bunun için DataGridView üzerine listelediğimiz kayıtlardan herhangi bir tanesine çift tıkladığımızda işin gerçekleşmesi için CellContentDoubleClick olayı işimizi görebilir ve içersine yazmamız gereken kodlar ise şunlar:

Bu adımdan sonra artık listelenen kayıtlar arasından birine çift tıkladığımızda tüm bilgileri text ve label nesnelerine yazılacak bizde güncelleme veya silme yaparken bu bilgilerden yararlanabiliriz.

NorthwindDataContext db = new NorthwindDataContext();
Category secilecek = db.Categories.FirstOrDefault(x => x.CategoryID == 
Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value.ToString()));
lblID.Text = secilecek.CategoryID;
txtName.Text = secilecek.CategoryName;
txtDesc.Text = secilecek.Description;

Update

Güncelle butonumuzun Click olayına ise şu kodları eklememiz yeterli :

NorthwindDataContext db = new NorthwindDataContext();
Category guncellenen = db.Categories.FirstOrDefault(x=>x.CategoryID ==Convert.ToInt32(lblID.Text));
guncellenen.CategoryName = txtName.Text;
guncellenen.Description = txtDesc.Text;
db.SubmitChanges();
Doldur();

Burada daha önce seçip bir label üzerine yazdırdığımız ID yi kullanarak TextBox lar üzerindeki güncel verileri alıp update işlemini gerçekleştiriyoruz.

Aynı şekilde delete işlemi içinde yazmamız gereken kodlar çok basit şöyle ki :

NorthwindDataContext db = new NorthwindDataContext();
Category silinen = db.Categories.FirstOrDefault(x => x.CategoryID == int.Parse(lblID.Text));
db.Categories.DeleteOnSubmit(silinen);
db.SubmitChanges();
Doldur();

Birde burada her işlemden sonra kullandığımız datagridview içersine bilgileri dolduran Doldur metodu var onuda sizlerle paylaşayım.

db = new NorthwindDataContext();
var sonuc = from x in db.Categories
select new
{
x.CategoryID,
x.CategoryName,
x.Description
};
dataGridView1.DataSource = sonuc;

Bu kodları butonlarımızın Click olaylarına yazdıktan sonra herhangi bir hataya karşı önlem almadığımız için işlem sıramız şöyle olmalı öncelikle form açılacak ve kayıtlarımız sıralanacak , ardından bir kayıt eklemek için textboxlar doldurularak Kaydet butonuna basılacak ve Doldur metodu ile kayıtlar yeniden datagridview üzerinde görüntülenecek ardından bir kayda çift tıklayarak bilgilerini text ve label üzerine yazdıracağız ve Güncelle butonu ile güncelleme ve Sil butonu ile seçilen kaydın silinme işlemlerini gerçekleştireceğiz.

Umarım yararlı olur

Bilgiyle Kalın

M.Zeki Osmancık

 

LinqToSQL _ Select 992 608 mezo

LinqToSQL _ Select

Merhaba arkadaşlar bu yazımızda sizlere LinqToSQL nesnesini en basit şekilde nasıl kullanırız bunu göstermek istiyorum. Öncelikle LinqToSQL nesnesini kullanabilmek için ilk yapmamız gereken şey projemiz içersine bu nesneyi eklemektir.

Bu nesneyi eklediğimizde ve Server Explorer üzerinde ekliyeceğimiz bir veritabanı varsa buradan tabloları sürükleyip bıraktığımızda kendisi otomatik olarak bu tablolar ile alakalı bazı class ları oluşturur bize sadece kullanmak kalır 😉

Bu işlemi tamamladıktan sonra geldi sıra kod yazma işlemine acaba bu LinqToSQL den nasıl veri çekip form üzerindeki nesnelerde gösterebiliriz.

Select sorgusu nasıl yapılır ?

Select işlemini farklı şekillerde yapabilirsiniz bunun bir kaç farklı yolu mevcut. Hepsinde aynı sonucu alırız yani “SELECT * FROM CATEGORIES ” sorgusunun sonucunu alırız 😉

NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.Categoriesselect x;dataGridView1.DataSource = sonuc;

 

NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.GetTable<Category>()select x;dataGridView1.DataSource = sonuc;

 

NorthwindDataContext db = new NorthwindDataContext();dataGridView1.DataSource =  db.GetTable<Category>();

Select sorgusuna Where kriteri ekleme işlemi ?

Select sorgusune Where kriterini eklemek için yani “SELECT * FROM CATEGORIES WHERE CATEGORYID = 1” sorgusunun LinqToSQL de yazılması işlemide şu şekillerde olabilir.

NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.Categorieswhere x.CategoryID ==1select x;dataGridView1.DataSource = sonuc;

 

NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.GetTable<Category>()where x.CategoryName.StartsWith(“B”)select x;dataGridView1.DataSource = sonuc;

Gelen sorguyu listeleme işlemi yani Order By anahtar kelimesinin yaptığı işi nasıl yapacağız şimdi kısa bir kodla bunu görelim 😉

       NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.GetTable<Category>()where x.CategoryName.StartsWith(“B”)orderby x.CategoryID ascendingselect x;dataGridView1.DataSource = sonuc;

 

       NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.Categorieswhere x.CategoryName.StartsWith(“B”)orderby x.CategoryID descendingselect x;dataGridView1.DataSource = sonuc;

 

Bu kodlar sadece select için kullanabileceğimiz basit kodlar. Bir sonraki yazıda Inner Join, Left, Right Join gibi yapıların nasıl kullanılabileceğine bakacağız.

Umarım Yararlı Olur

Bilgiyle Kalın.

M.Zeki Osmancık

Windows 8 Metro App _ ListView 955 577 mezo

Windows 8 Metro App _ ListView

Merhaba arkadaşlar

Metro uygulamalardaki data nesnelerinden biri olan ListView nesnesini kısa ve basitçe tanıtmak istiyorum. ListView basit bir listbox gibi çalışır. İçersine List veya DataTable tipinde nesneler verebilmek mümkün. Çok çok basit bir örnek ile bu nesnenin nasıl çalıştığına dair bir örnek yaparak bakalım… Öncelikle formumunuzun üzerine bir ListView nesnesi atarak özelliklerini belirliyoruz. Formun üzerindeki görünümü.


 XAML kodunda ListView görünümü.

 Formumuz üzerine bir listview ekledikten sonra içersindeki elemanların nasıl görüneceği ile alakalı bir  işlem yapabiliriz dümdüz bırakıp içersinde default olarak bir nesne görüntülenmesini sağlayabiliriz. Şimdi çok basit olarak string tipinde bir liste doldurup listview in ItemSource özeliği ile bu listview i nasıl doldurabileceğimizi görelim.

Öncelikle bir liste dolduralım.

List<string> liste = new List<string>();liste.Add(“Deneme 1 “);liste.Add(“Deneme 2 “);liste.Add(“Deneme 3 “);liste.Add(“Deneme 4 “);

Ardından sadece tek bir satır kod ile yanı ListView in ItemsSource özelliğine atama yaparak nasıl bir görüntü elde ediyoruz görelim .

lstListe.ItemsSource = liste;

Bu atamayı yaptıktan sonra sıra geldi projeyi çalıştırmaya bakalım nasıl bir görüntü elde ediyoruz.


En basit manada ListView nesnesinin kullanımı  bu şekilde oluyor.

Umarım yararlı olur….

Bilgiyle Kalın… 😉

M.Zeki Osmancık

Merhaba Windows 8 Metro Style Apps 1024 652 mezo

Merhaba Windows 8 Metro Style Apps

Merhaba arkadaşlar

Bu yazımda sizlere beklenen işletim sistemi Windows 8 ile birlikte gelen ve kullanması çok keyifli olan Metro Application ile alakalı bir başlangıç yazısı sunacağım.

Bilindiği gibi  Windows  8 daha çok tablet pc ler için ideal bir işletim sistemi olarak  tasarlandığından  dokunmatik ekrana uygun olan ve tam ekranı kaplaya uygulamalar yani Metro Style uygulamalar geliştirilmeye başlandı.

.Net 4.5 ile birlikte gelen Metro Style uygulamalar gerçektende kullanımı kolay görseli başarılı uygulamalar olduğundan ileride Windows tabletlerde ve mobil cihazlarda yaygınlaştığında kullanım kolaylığı nedeniyle tercihleri kendi üzerine çekebilir.

Metro Style Uygulamalar tam ekran çalışan , çalışılan cihaza ve dokunmatik ihtiyaçlarına göre ayarlanabilen uygulamalar olarak tanımlanabilir.

Metro Style Uygulamalar sadece anlattıklarımız kadarmı peki derseniz cevabımız hayır olacaktır,çünkü metro style uygulamalar arka tarafta suspend modunda çalışırlar ve böylelikle pil ve performansı etkilememiş olurlar aynı zamanda 3 şekilde çalışabilme imkanlarıda mevcut Full Screen ,Snap Up ve Filled ‘ dır…

Şimdi sizlere Visual Studio 2012 de .Net Framework ile birlikte Metro Style bir uygulamaya nasıl merhaba deriz bir bakalım.

Öncelikle proje açarken karşımıza Windows Metro Style  adında bir proje grubu geliyor ve bu grup içersinde Metro Style bir uygulama geliştirebilmek için gerekli olan nesneler mevcut.

Dilerseniz boş bir sayfa dilerseniz hazır referans olarak kullanılabilecek küçük hazır projelerde eklenmiş açıp kullanmaya başlayabileceğimiz projeler içersine .

Blank App projesi açıldığında karşımıza gelecek olan boş siyah zeminli bir sayfa ve alt kısımda XAML kodları olacaktır. Bu sayfa tıpkı Windows Forms uygulamalarındaki Form gibi tek farklı XAML kodları ile dizayn edilmesi.

Yeni bir proje açtım ve üzerine Windows Forms uygulamalarında aşina olduğumuz Label kontrolünün XAML versiyonu olan TextBlock kontrolünü sayfanın ortasına bıraktım. Properties penceresinden text ve font özelliklerini ayarlayarak ilk uygulamamın nasıl görüneceği ile ilgili bir fikir sahibi olabileceğim artık. Eğer Windows 8 kullanmaya başlamışsanız bu projeyi kendi makinanız üzerinde rahatça çalıştırabilirsiniz. “Ya Windows 7 kullanıyorsak?” diye sormayın denemedim 😀 Ondada muhtemelen simulatoru kullanıyorsunuz…

Uygulamayı çalıştıracak olan Run butonuna geldiğimizde burada Local Machine, Simulator adında seçenekler var bunlardan biri tıpkı Windows Phone 7 uygulamalarında olduğu gibi bir tablet simulator u açar ve uygulamalarımızı orada çalıştırır. Bu simulator aşağıdaki resim gibi bir şey 🙂

Ardından simulator çalıştığına göre benim uygulamamıda gösterecektir birde ona bakalım nasıl bir şey olmuş benim sayfanın göbeğine yerleştirdiğim TextBlock.

Windows 8 Metro App uygulamasına ilk adımı atmış bulunuyoruz hayırlı olsun.

Bu konuyla alakalı daha pek çok makale çok yakında….

Bilgiyle Kalın…

M.Zeki Osmancık

 

 

Sınırsız Ağaç Yapısı ve Treeview Kullanımı 563 595 mezo

Sınırsız Ağaç Yapısı ve Treeview Kullanımı

Merhaba arkadaşlar

Bu yazımda çokça bahsedilen çokça kullanılacak olan bir kontrol yapısı ve bunun database den gelen verilerle nasıl çalıştığını göstermek isterim sizlere…

Bahsettiğimiz kontrolümüz Treeview denilen bir nesne bu nesne bizlere ağaç yapısı bulunan bilgileri rahatlıkla ve tek ekranda görmemizde bizlere kolaylık sağlayan bir kontrol peki ama nasıl bu kontrole birşeyler ekler kullanılabilir hale getirebiliriz…

Öncelikle bir DB ye ve tabloya ihtiyacım var sırası gelmişken birde SQL tablosunda sınırsız ağaç yapısından bahsetmeden olmaz heralde.  Şekildeki gibi bir veritabanı oluşturdum…

 

Buradaki mantık aslında basit eğer bir kayıt root kayıtsa yani kök kayıtsa o zaman AltKategoriID si NULL olmalıdır. Eğer girdiğimiz kategori başka bir kategori altında duruyorsa o halde hangi kategori üst ise AltKategoriID sine o kaydın ID değerini girmeliyiz. Zaten resimdeki birbirine bağlı yapıda bunu temsil eder. Birde girdiğimiz verileri inceleyin bakalım nasıl birşey varmış 😀

Burada Elektronik root yani ana kategori Bilgisayar onun altında bulunduğu için Bilgisayar kaydının AltKategoriID si Elektronik kaydının ID sine eşit Bilgisayarın altında olanlarda Bilgisayar kaydının ID sine sahip olacaktır böylelikle alt alta uzayıp giden sınırsız bir ağaç yapısına sahip olabiliriz.

Peki tablomuz tamam verilerimizide girdik e hani Treeview  derseniz onuda şöyle özetleyelim

Yeni bir Windows formuma Treeview ve button nesnemi yerleştirdim

Ardından button nesnesinin Click olayına gelerek dedim ki  :

DataRelation baglanti;private void btnListele_Click(object sender, EventArgs e){SqlConnection cnn = new SqlConnection(“Data Source = .; Initial Catalog = Deneme; User = sa; Password = 1234567?;”);SqlDataAdapter adp = new SqlDataAdapter(“Select * From Kategoriler”,cnn);DataSet ds = new DataSet();

adp.Fill(ds,”Kategoriler”);

 

baglanti = new DataRelation(“baglan”,ds.Tables[“Kategoriler”].Columns[“KategoriID”],

ds.Tables[“Kategoriler”].Columns[“AltKategoriID”]);

 

ds.Relations.Add(baglanti);

 

foreach (DataRow dr in ds.Tables[“Kategoriler”].Rows)

{

if (dr[“AltKategoriID”] == DBNull.Value)

{

TreeNode root = new TreeNode(dr[“KategoriAdi”].ToString());

root.Tag = dr[“KategoriID”];

tvAgac.Nodes.Add(root);

AltKategorileriGetir(dr,root);

}

}

tvAgac.ExpandAll();

}

 


Kodlara bakacak olursak klasik bir ADO.net ile verilerimi alıp bir DATASET e eklemişim biliyorsunuzki DATASET nesnesi içine birden

fazla DATATABLE nesnesi barındırabilen bir nesne yani sanal veritabanı gibide düşünebiliriz aslında. Peki database de bağlantılar olurda bunda olmazmı ? Olmamı tabikide olur bu bağlantıyıda DATARELATION nesnesi sağlar işte tam burada bende verilerimi çektikten sonra içindeki hangi veri ile hangi verinin eşleşeceği yani hangisinin ana ID hangisinin ona bağlı olan Altkategori olduğunu belirtip bağlantımı tamamladım. Ardından bir foreach ile Dataset içersine attığım Datatable içindeki satırları tek tek almaya başladım ve bu foreach içersinde sadece AltKategorisi NULL olanları aldım yani Root olan kök olan kayıtları aldım ve Treeview nesneme ekledim.

Peki bunun altında bişi yokmu ? Altındakini hatta onun altındaki kayıtları nasıl alacağız derseniz ondada bir metotun yardımını isteyip o metodu kendi içersinde çağırarak işimizi çözeceğiz…

 

private void AltKategorileriGetir(DataRow dr,TreeNode pNode){foreach(DataRow row in dr.GetChildRows(baglanti)){TreeNode childNode = new TreeNode(row[“KategoriAdi”].ToString());childNode.Tag = row[“KategoriID”];pNode.Nodes.Add(childNode);

AltKategorileriGetir(row,childNode);

}

}

 

Bu metodu çalıştırırkende biraz once kontrol ettiğimiz root kaydı ve oluşturulan TreeNode nesnesini parametre olarak yolladıktan sonra oluşturduğumuz bağlantı nesnesi ile Altkategorideki değerleri kontrol ediyoruz ve varsa yine TreeNode oluşturup mevcut Node altına ekliyoruz. Vee sonra kategori ve altındaki elemanları tek tek karşıma geliyor

Umarım yararlı olur

Görüşmek Üzere

M.Zeki Osmancık

 

GDI 2 _ Grafik Çizimi 426 487 mezo

GDI 2 _ Grafik Çizimi

Merhaba arkadaşlar

GDI ile ilgili önceki yazımızda neyin nasıl kullanılacağını görmüştük bu sefer bu GDI metotlarını kullanarak nasıl hesaplamalar yaparız. Seçim sonuçlarında hep görürüz bir pasta dilimi üzerinde partilerin oyları görünür ve yüzde olarak pasta grafikde bir dilim kaplarlar . Bakalım bizim partilerden hangisi ne kadar oyla pastanın neresinde duracak ???

Öncelikle WindowsForm uygulamamız üzerine 2 TextBox 1 Button ve 1 PictureBox atıyoruz.

Bu görüntüyü elde ettikten sonra yapmamız gerek pek de birşey kalmadı aslında sadece kod bloğunu açıp yazmak kalıyor 😀

string[] partiler = new string[10];int[] oylar = new int[10];int siraNo, toplamOy;

Öncelikle yukardaki gibi değerlerimi tutacağım dizilerimi  ve hesaplama yapabilmek içinse değişkenlerimi GLOBAL olarak tanımladım.

Daha sonra buton içersinde değerlerimi alıp bunları grafiksel olarak picturebox içersine çizdireceğim.

Öncelikle 10 elemanlı bir dizi oluşturduğum için dizinin boyutundan çok eleman girilmesin diye bir kontrol yapıyorum. Ardından oylar içersine değer eklerken int değerlerin girildiğinden emin oluyorum…

            if (siraNo == 10){MessageBox.Show(“10 partiden fazla olamaz???”);return;}try

{

oylar[siraNo] = int.Parse(textBox2.Text);

}

catch (Exception)

{

MessageBox.Show(“Oylarda Hata Var”);

return;

}

 

Hem partiler hemde oylar aynı indeks numaralarına yazdırılacak .

            partiler[siraNo] = textBox1.Text;toplamOy += oylar[siraNo];siraNo++;Graphics grp = this.pictureBox1.CreateGraphics();grp.Clear(pictureBox1.BackColor);

Random rnd = new Random();

int i, basAci=0,yayAci ,boy=0;

Color renk;

HatchBrush firca;

Toplam oy sayısını hesaplıyoruz.  Ardından nesnelerimizi tanımlıyoruz.  Picturebox üzerine çizim yapabilmek için Graphics nesnesi oluşturuyoruz. Picturebox da ne varsa siliyoruz. Color değişkeni ve desenli çizim için HatchBrush nesnesi oluşturuyoruz.

Index numarasına göre tüm dizi içersindeki elemanları alıp grafiksel olarak çizebilmek için bir for döngüsü oluşturuyoruz.

            for (i = 0; i <= siraNo-1; i++){yayAci = 360 * oylar[i] / toplamOy;renk = Color.FromArgb(rnd.Next(255), rnd.Next(255), rnd.Next(255));firca = new HatchBrush((HatchStyle)rnd.Next(50), renk);grp.FillPie(firca,0,80,200,200,basAci,yayAci);

 

grp.DrawString(“% ” + boy.ToString(), new Font(“Tahoma”, 8, FontStyle.Bold), Brushes.Black, 5, 80 + i * 20);

grp.FillRectangle(firca, 260, 80 + i * 20, 18, 18);

 

grp.DrawString(partiler[i] + ” = ” + oylar[i].ToString(), new Font(“Tahoma”, 8, FontStyle.Bold), Brushes.Black, 290, 80 + i * 20);

basAci += yayAci;

}

 

Çizdireceğimiz FillPie nesnesinin kaç derecelik bir açı ile çizileceğini hesaplamak için yay _aci değişkenini kullanacağız.  Random renk elde edebilmek için Color.FromArgb metodunu kullanarak rastgele renk değerlerini veriyoruz. HatchBrush üzerindede random olarak desen gelebilmesi için gerekli tanımlamayı yapıyoruz. Ardından küçük bir kare rengin hangi partiye ait olduğunu göstermek için hemen yanınada partinin adı ve oy sayısı  yazdırdıktan sonra en son tanımladığım başlangıç açısı bas_Aci değişkenini çizdiğim şeklin yay_Aci değeri kadar arttırıp yeni çizilecek olan pie için başlangıç konumunu belirliyoruz.

Ve son olarak karşımıza çıkan görüntü :

Böylelikle Graphics nesnesindeki değerlerin nasıl işimize yarayacağı biraz daha kafamızda oturmuş olur umarım…

Görüşmek Üzere.

M.Zeki OSMANCIK

GDI 401 376 mezo

GDI

Merhaba arkadaşlar

GDI  = Graphical Design Interface  ile ilgili ufak bir bilgi vermek istiyorum sizlere. GDI, Windows uygulamaları üzerinde çizim işlemleri gerçekleştirmemize olanak tanıyan sınıflardır.

Bu sınıflar ile Windows formlar üzerine veya print nesneleri ile kağıt üzerine bazı çizimler yapabilmemiz mümkün.

Öncelikle bir çizim yapabilmek için de ilk gereken bir kağıt yada çizim yapılacak alandır öncelikle bunu belirtmemiz gerekiyor

Form üzerine çizim yapabilmek için:Graphics grp = this.CreateGraphics();

 

PictureBox üzerine çizim yapabilmek için:

Graphics grp = pictureBox1.CreateGraphics();

 

Çizim alanımızı oluşturduktan sonra ile form veya picturebox üzerine ne çizdireceğimizi seçmemiz gerekiyor ama bunu seçmeden öncede çizmek için gerekli olan kalem veya içi dolu bir şekil çizeceksek fırça gerekiyor. Bunu da şu şekilde tanımlayabiliriz;

Pen kalem = new Pen(Color.Blue);kalem.Width = 5;

 

Brush firca = new SolidBrush(Color.Red) ;

 

Bu şekilde tanımladığımızda kalem ve fircanin özelliklerini değiştirebilir durumda oluyoruz. Kalemin kalınlığı vs gibi özelliklerini ayarlayabiliyoruz. Ya bunlara ihtiyacımız yoksa bunlarla uğraşmadan nasıl yaparız derseniz onun çözümüde şu şekilde…

Pens.Blue 

Brushes.Red

 

Hemen belirteyim bu şekilde kullanım tek başına mümkün olmuyor ancak gerekli kodlar içersinde bu şekilde kullanabilirsiniz biraz aşağıda bunun örneklerini göreceksiniz zaten 😉

Çizim alanı tamam kalem tamam firça tamam eee ne kaldı geriye ??? Sadece çizmek kaldı 😉

Çizim yapabilmek içinde ilk başta örneğini (instance) aldığımız Graphics nesnesini kullanacağız. Ve içersindeki çizim metotları ile form üzerine şekiller çizeceğiz….

grp.DrawLine(Pen nesnesi, X1, Y1, X2, Y2);grp.DrawLine(kalem, 50, 50, 150, 50);

Formun üzerine Line çizerken verilen koordinatlar 2 tane x ve y noktalarıdır bu iki noktayı belirtiriz ve DrawLine metodu bizim yerimize bu iki noktayı birleştirir ve şekildeki gibi bir görüntü ortaya çıkar.

Birde Dikdörtgen Yuvarlak bişiler çizelim.

grp.DrawEllipse(Pen nesnesi, X, Y, Genişlik, Yükseklik);grp.DrawEllipse(kalem, 100, 100, 100, 100);

 

grp.DrawRectangle(Pen nesnesi, X, Y, Genişlik, Yükseklik);

grp.DrawRectangle(Pens.Blue, 200, 100, 100, 100);

 

Bu şekilleri çizerkende gerekli olan veriler önce bir kalem sonra X ve Y noktası ardından çizilecek olan şeklin yükseklik ve genişlik bilgileridir.

Son olarak Pie yani kekden bahsetmek istiyorum 😀 evet sizi keklemiyorum pasta grafik olarak adlandırdımız şekli nasıl çizeriz ona bakalım…

grp.DrawPie(Pen nesnesi, X, Y, Genişlik,Yükseklik , Başlangıç Açısı, Yay Açısı); 

grp.DrawPie(kalem, 50, 200, 100, 100, 0, 270);

Şimdi birde bunların içi dolu olanları nasıl yazılıyor aralarında ne fark var görelim 😉

grp.FillEllipse(firca, 100, 100, 100, 100);grp.FillRectangle(firca, 200, 100, 100, 100);

grp.FillPie(Brushes.Purple, 50, 200, 100, 100, 0, 270);

 

 

 

GDI nesnesi sadece bu işemi yarar diyebilirsiniz 😀 Bu sadece başlangıç bir sonraki yazıda GDI nin asıl nasıl kullanılabildiğini göreceğiz 😉

Görüşmek Üzere…

 

 

JavaScript XmlHttpRequest 657 588 mezo

JavaScript XmlHttpRequest

Merhaba arkadaşlar bu yazımda sizlere Javascript ile yapılabilen çok yararlı bir o kadar performanslı hep görüp acaba nasıl dediğimiz bir yapıyı anlatmaya çalışacağım…
XML HTTP REQUEST Javascript ile herhangi bir server’a http request yapmanıza olanak veren guzel bir objedir. Gelen cevabı parse edip sayfadaki bazi öğeleri değistirebilir ve sayfa refresh olmadan bir cok şey yapilabilir. Yani işin kısası Postback olmadan bilgileri çekebilme işlemini gerçekleştirmemize yardımcı oluyor. Örnek olarak Google da yazdığımız bir harf tamamlanarak öneriler halinde geliyor. Sayfanın yenilendiğini görmüyoruz sadece önerilerin belirdiği gözlemleniyor ama bu verilerde bir veritabanından geliyor o derece hızlı 😉


Bu teknolojiyi Internet Explorer, Mozilla Firefox,Opera ve Safari destekliyor.Xml Http Request İnternet Explorer ‘da ActiveX Control , Firefox ‘ta ise DOM (Document Object Model)’ in bizzat parçasidir. Internet Explorer 7’ den itibaren native olarak desteklenmektedir. Bu sayede de artik ActiveX ‘i kapatilmis browserlarda dahi calisabilmektedir.
Bu yapının avantajlarını şöyle sıralayabilirim :
• En önemli artısı, sayfa yenilenmediği için değişken olmayan diğer kısımların sunucuda yeniden işlenip sunucuyu yorması engellenir;
• Kullanıcıda tekrar yüklenmediğinden bant genişliği boşa harcanmaz, aynı zamanda kullanıcı tarafında sayfalarda daha hızlı işlem yapılır.
• Sayfayı yenilenmeden içeriğimizi alıyor olmamız, web uygulamamıza bir masaüstü uygulama görünümü katar.
• Web uygulamalarının tek sıkıntısı, hızlı ve pratik çalışamıyor olmanızdır. Web yazılımları masaüstündeki yazılımlar gibi pratik kullanılan şeyler olmalıdır
• XMLHttpRequest aslında javascript ile sunulmuş bir kolaylıktır. Web sitesinin eş zamanlı olarak arka planda çalışan olaylarını takip eder. XML CSS ve javascript ile sonucun anında görülmesini sağlar.
• XMLHttpRequest istemci tarafında (Client Side) çalışır. Birden fazla asenkron web sayfasına postback ve yenileme yapmadan istekte bulunabilir ve gelen cevapları istekte bulunanlara iletir.

ONREADYSTATECHANGE
Sunucuya bir istek gönderilmesinden sonra, sunucudan dönen veriyi alabilecek bir işleve ihtiyacımız var. onreadystatechange özelliği sunucunun yanıtını işleyecek olan fonksiyonu tutar.
Aşağıdaki kod hem boş bir fonksiyon tanımlar hemde onreadystatechange özelliğini ayarlar

xmlHttp.onreadystatechange=function(){ // Buraya kod yazacağız}

 

READYSTATE ÖZELLİĞİ
Sunucu yanıtının durumunu tutar. readyState her değiştiğinde onreadystatechange fonksiyonu çalıştırılır. Sunucudan gelen yanıtın tamamlandığını (veriyi alabileceğimiz durumu) kontrol etmek için onreadystatechange işlevimize bir If ifadesi ekleyeceğiz:

xmlHttp.onreadystatechange=function(){ if(xmlHttp.readyState==4)

{ // Veriyi sunucu yanıtından al }
}

 

RESPONSETEXT ÖZELLİĞİ
Sunucudan gelen veri responseText özelliği ile alınabilir.
Kodumuzda “time” form değişkenimizin değerini responseText değerine eşitleyeceğiz:

xmlHttp.onreadystatechange=function(){

if(xmlHttp.readyState==4)

{

document.myForm.time.value=xmlHttp.responseText;

}
}

XMLHttpRequest nesnesini etkin şekilde kullanmanın 2 yolu mevcut:

Send the Request
Bu yöntem bir XMLHttpRequest nesnesi yaratıp olayları dinlemesi için atamaktır.
Basit olarak bir xhr nesnesi yaratıyoruz:

var xhr = new XMLHttpRequest();

Daha sonra oluşturduğumuz nesneyi onreadystatechange ile olayları dinlemesi için görevlendirmek:

xhr.onreadystatechange = myCallback;

Ardından open() metodunu çağırıyoruz.

xhr.open(‘GET’, ‘somefile.txt’, true);

ilk parametre HTTPRequest tipini belirler (GET,POST,HEAD,……) Get ve Post en sık kullanılanlardır. Get deyimini istekle birlikte çok fazla data göndermemiz gerekmiyorsa kullanırız. Bunun aksi durumlarda POST kullanırız.
İkinci parametre bizim istekte bulunduğumuz URL dir. Örnekte belirtilen bir text dosyasıdır sayfamızla aynı adres içerisinde bulunur.
Son parametremizde isteğin boolean değerdir isteğin eş zamanlı olmaması durumunu true veya false değer ile belirler.
Son adım olarak isteği göndermektir.

xhr.send(”);

Send() metodu istekle birlikte herhangi bir datayıda içerebilir. Get ile gönderilen isteklerde bu boş bir stringdir çünkü data URL olarak belirttiğimiz dosya yada adrestedir. POST ile gönderilen isteklerde bir query string mevcuttur key=value&key2=value2.
Bu noktada istek gönderilir ve kodlar diğer bir göreve atanabilir. Callback fonksiyonu isteğimizim serverdan geri gelmesi ile çağırılır.

Process the Response
Olay dinleyici cevap geldiğinde uyarır ve kodlarımız gelen cevap ile yararlı işler yapar her gelen cevabı boşa kontrol ve ya işleme sokmak zorunda kalmayız.
Readystatechange olayı ile bir dinleyici yerleştirdik XHR nesnesinin readystate özelliğini çağırdık. Readystatechange olayı çalıştığında her zaman değişen bir özelliktir .
Readystate özelliği şu değerleri takip eder
0—uninitialized
1—loading
2—loaded
3—interactive
4—complete = istek geri geldi ve işlendi.
Readystate özelliğini 4 olarak ayarladığımızda bunun anlamı istek geri geldi ve işleme girdi demektir. 4 özelliği sadece bununlada kalmayarak HTTP istek durum kodlarınıda inceler. Olmayan bir URL gönderildiğinde alınadan HTTP istek kodu 404 (Dosya bulunamadı) hatasıdır.
Eğer dönen durum kodu 200 (ok ) ise bu geçerli bir adres bulunduğunu XHR nesnesinin çalışabileceğini belirtir.

function myCallback() {if (xhr.readyState < 4) {

return; // not ready yet

}

if (xhr.status !== 200) {

alert(‘Error!’); // the HTTP status code is not OK

return;

}

// all is fine, do the work

alert(xhr.responseText);

}

Önce istekte bulunduğumuz sayfayı yeni içerik olarak almış olacağız ve bunu ister sayfada görüntüleyebilir istersekte bir takım hesaplamalarda kullanabiliriz.

Hadi bununla ilgili bir uygulama yapalım kafalarda nasıl çalışır bu sorusu olmasın 😉
XMLHTTP REQUEST yöntemiyle databasede bulunan kategorilere ait ürünleri hızlı bir biçimde ekranda görüntüleyeceğiz.
Öncelikle XmlHttpRequest nesnemizi yaratmak için bir function yazıyoruz.

 

Daha sonra oluşturduğumuz bu nesneye get ile parametre yollayabileceğimiz ve geri dönüş sağlayabileceğimiz başka bir function daha yazıyoruz.

Daha sonra Handler ile istekte bulunduğumuz ürün grubunun kategori id sini birlikte yollayabileceğimiz başka bir function daha yazıyoruz.

Sayfamızın CodeBehind kısmındada Repeater nesnesi ile databasedeki “Categories” tablosundaki kategori isimlerini buton nesneleri ile birlikte oluşturuyoruz.

Son olarak sayfamızı görüntülediğimizde hem butonlarla bir seçim yapabiliyoruz hemde Dropdown menü ile istediğimiz Kategoriye ait ürünleri görüntüleyebiliyoruz.
Hiç beklemeden sanki masaüstü uygulamasıymışcasına hızlı ve pratik

Umarım Yararlı olur 😉

M.Zeki Osmancık

XML ile Telefon Defteri Yapalım 3!! 618 381 mezo

XML ile Telefon Defteri Yapalım 3!!

Projemize kaldığımız yerden devam ediyoruz 😀
Kaydet işleminden farklı olarak mevcut olan kaydı düzenlemek için düzenleme butonumuzun Click olayına ilgili kodları yazıyoruz.

protected void Button2_Click(object sender, EventArgs e){

xmlDoc = new XmlDocument();

xmlDoc.Load(dosya);

XmlNode secilen = xmlDoc.SelectSingleNode(“Kisiler/Kisi[Ad='” + ListBox1.Text + “‘]”);

secilen[“Ad”].InnerText = TextBox1.Text;

secilen[“Soyad”].InnerText = TextBox2.Text;

secilen[“Telefon”].InnerText = TextBox3.Text;

xmlDoc.Save(dosya);

TextBox1.Text = “”;

TextBox2.Text = “”;

TextBox3.Text = “”;

TelefonlariYukle();

}

Farklı bir işlem yapmadık aslında. XmlNode iledüğümü belirledik ve InnerText ile o düğüm içersinde var olan veriyi almış olduk. Yeni değerleride yine InnerText ile yerine yazmış olduk. Bütün işlemleri element içersindeki düğümlerdeki bilgiler ile yaptık yeni kayıt için yeni düğümler ekledik mevcut düğümler ekledik. Silme işlemi içinde tabiki düğüm silmemiz gerekecek bunun içinde Sil butonuna…

protected void Button3_Click(object sender, EventArgs e){

xmlDoc = new XmlDocument();

xmlDoc.Load(dosya);

XmlNode secilen = xmlDoc.SelectSingleNode(“Kisiler/Kisi[Ad='” + ListBox1.Text + “‘]”);

xmlDoc.DocumentElement.RemoveChild(secilen);

xmlDoc.Save(dosya);

TextBox1.Text = “”;

TextBox2.Text = “”;

TextBox3.Text = “”;

TelefonlariYukle();

}

RemoveChild ile ChildNode dediğimiz seçilen düğümü silme işlemini gerçekleştirebiliyoruz.

Peki 3 temel işlemimiz bitti birde bu Xml sayfası içersinde arama yapmak istersek ?

Bunun içinde en alt kısma yerleştirdiğimiz Textbox ve Button ile bu işi çözebiliriz . Bu işlem içinde …

protected void Button4_Click(object sender, EventArgs e){

ListBox1.Items.Clear();

XPathDocument xp = new XPathDocument(dosya);

XPathNavigator xn = xp.CreateNavigator();

string sorgu = “Kisiler/Kisi[Ad='”+TextBox4.Text+”‘]/Ad”;

XPathNodeIterator ni = xn.Select(sorgu);

while (ni.MoveNext())

{

ListBox1.Items.Add(ni.Current.ToString());

}

}

İşte Xml i veritabanı olarak kullanarak yaptığımız çok basit bir telefon defteri 😉

Güle Güle kullanın 😀

Projeyi İndirebilmek için Tıklayın!!

Bilgiyle Kalın …

M.Zeki Osmancık

XML ile Telefon Defteri Yapalım 2!! 675 378 mezo

XML ile Telefon Defteri Yapalım 2!!

Bir önceki yazının devamı olarak bu yazımızdada projemizi geliştirmeye devam ediyoruz.

Listbox a kayıtlarımızı ekledikten sonra listbox üzerinde bir kaydı seçtiğimizde bilgilerin ilgili textbox lara yazılmasını istiyoruz bunun içinde Listbox kontrolünün SelectedIndexChanged olayına ilgili kodları yazıyoruz.

protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e){xmlDoc = new XmlDocument();

xmlDoc.Load(dosya);

XmlNode secilen = xmlDoc.SelectSingleNode(“Kisiler/Kisi[Ad='” + ListBox1.Text + “‘]”);

TextBox1.Text = secilen[“Ad”].InnerText;

TextBox2.Text = secilen[“Soyad”].InnerText;

TextBox3.Text = secilen[“Telefon”].InnerText;

}

Bu işlemden sonra projemizde bir adım daha atmış oluyoruz ve her kaydı seçtiğimizde o kayıtla ilgili tüm bilgiler ilgili textboxlara yazılıyor. Bu bize Update işleminde çok büyük kolaylık sağlayacak.

İlk olarak Kaydet butonunu işlevine kavuşturalım. Ve buton1 in Click olayına ilgili kodları yazalım.

protected void Button1_Click(object sender, EventArgs e){xmlDoc = new XmlDocument();

xmlDoc.Load(dosya);

XmlElement xe = xmlDoc.CreateElement(“Kisi”);

XmlNode ad = xmlDoc.CreateNode(XmlNodeType.Element,”Ad”,””);

XmlNode sAd = xmlDoc.CreateNode(XmlNodeType.Element, “Soyad”, “”);

XmlNode tel = xmlDoc.CreateNode(XmlNodeType.Element, “Telefon”, “”);

XmlAttribute xa = xmlDoc.CreateAttribute(“Tur”);

xa.Value = “Cep”;

tel.Attributes.Append(xa);

ad.InnerText = TextBox1.Text;

sAd.InnerText = TextBox2.Text;

tel.InnerText = TextBox3.Text;

xe.AppendChild(ad);

xe.AppendChild(sAd);

xe.AppendChild(tel);

xmlDoc.DocumentElement.AppendChild(xe);

xmlDoc.Save(dosya);

TextBox1.Text = “”;

TextBox2.Text = “”;

TextBox3.Text = “”;

TelefonlariYukle();

}

XmlElement: Xml dosyası içersinde bulunan bir elemanı temsil eder.

XmlNode: Eleman içersindeki her bir düğümü temsil eder.

XmlAttribute : Düğümlerin sahip olduğu özellikleri temsil eder.

Görüldüğü üzere Xml dosyamızı bir database gibi kullanarak kayıtları görüntüleyip yeni kayıtları Xml üzerine yazabiliyoruz.

Bilgiyle Kalın…

M.Zeki Osmancık

XML ile Telefon Defteri Yapalım !! 410 256 mezo

XML ile Telefon Defteri Yapalım !!

Merhaba arkadaşlar bir önceki yazımızda XML nedir nasıl kullanılır ile alakalı bilgi vermiştik.Bu yazımızda sizlerle C# ile Xml ortak yapımı bir proje yapacağız. Bu web projemizde Xml dosyasını bir database gibi kullanarak kayıt yapacağız, kayıt okuyup, sileceğiz.

Öncelikle resimdeki gibi  4 TextBox , 4 buton, 1 Listbox dan oluşan formu tasarlıyoruz.

Bu formu tasarladıktan sonra projemizle birlikte kullanacağımız Xml dosyamızı yaratarak içersindeki düğümleri oluşturmamız gerekiyor.

Bu xml dosyası bizim veritabanımız olacak.

Genel hazırlıkları tamamladıktan sonra kodlama kısmına geçelim. İlk olarak bilmemiz gereken bir nesnemiz var  XMLDocument  nesnesi bu nesne xml dosyasını  önbellek üzerinde çalışılabilir hale getirerek işimizi kolaylaştırır.Önce bu nesneyi global seviyede tanımlayarak başlayalım.

XmlDocument xmlDoc;

Bu nesneden sonra yine tüm proje içersinde kullanabilecek bir değişken olan xml dosya yolunu tutacağımız bir string değişken tanımlayarak sayfanın yüklenmesi sırasında bu yolu değişkene atamalıyız.

dosya = Server.MapPath(“Telefon.xml”);

Dosya değişkenine yolu atadıktan sonra XML dosyamız üzerindeki kayıtları okuyarak Listbox nesnemiz üzerine yazdıracak bir metot yazalım.

void TelefonlariYukle(){ListBox1.Items.Clear();

XPathDocument xp = new XPathDocument(dosya);

XPathNavigator xn = xp.CreateNavigator();

string sorgu = “Kisiler/Kisi/Ad”;

XPathNodeIterator ni = xn.Select(sorgu);

while (ni.MoveNext())

{

ListBox1.Items.Add(ni.Current.ToString());

}

}

XPathDocument : Xpath data modeli kullanılan okuma yöntemlerinde Xml dosyalarından daha hızlı okuma sağlar.

XPathNavigator : Verilerin üzerinde bir izleme oluşturur ve XML belgesi içinde bu izlenecek olanları görüntüler.

XPathNoteIterator:Seçilen düğümler üzerinde bir yineleme sağlar.

Bu işlemi yaptıktan sonra listbox nesnesi üzerine Xml dosyası üzerindeki Ad düğümüne yazılmış kayıtlar tek tek gelecektir.

Bu kadar değil devam edecek 😉

Bilgiyle Kalın…

M.Zeki Osmancık

XML Nedir? 288 116 mezo

XML Nedir?

Merhaba arkadaşlar bu yazımızda XML yapısını açıklamaya çalışacağım.

Öncelikle XML in ne olduğundan başlayalım. Her ne kadar bilgisayar kullanan herkes bir şekilde XML dosyaları ile çalışıyor olsada nasıl bir yapı olduğunu ve nasıl kullanılabileceğini kestiremeyebilir zaten çoğu kimse kullandığı hazır programlar sayesinde XML ile çalışıyor.En basiti bir otel her gece emniyete otelde konaklayanların listesini emniyetin ona vermiş olduğu program ile göndermek zorunda. Göndermek zorunda olduğu dosya XML dosyasıdır bunun gibi bir çok örnekte göreceğimiz gibi XML yaygın bir iletişim dosyası.

XML (Extensible Markup Language) bir programlama dili değildir. Sadece markup yani işaretleme dilidir. Markup dillerine örnek olrak HTML,WML vs.. verilebilir. Bu dillerde veriler bazı işaretlerle (etiket) işaretlenirler. Örneğin bir HTML kodunda bir başlık yazısı <h1> etiketi ile işaretlenir. Sonuç olarak bir belgedeki verileri işaretlemeye yarayan dillere markup dilleri denir.

W3C ( World Wide Web Consortium) organizasyonu tarafından tasarlanan ve herhangi bir kurumun tekelinde bulunmayan XML kişilerin kendi sistemlerini oluşturabilecekleri kendi etiketlerini tanımlayarak çok etkin ve rahat kullanabilecekleri ve bu belirlenen etiketleri kendi yapıları içersinde standardize edebilecekleri esnek , genişleyebilir ve kolay uygulanabilir bir meta dilidir.

Farklı tipteki verileri orjinal formatlarında tek bir havuzda tutabilen XML veriye hızlı kolay ve ortamdan bağımsız olarak erişebilme imkanı sunar.

Öncelikle veri transferinin kolaylaşmasını ve verinin içerik bilgisiyle saklanabilmesini hedefleyen XML, içerik ve sunum bilgilerini birbirinden ayırır. Bu özelliği ile de HTML’den farklılaşır.

  • XML bir document’in(belgenin) yapısını ve görünümünü tanımlamak için kullanılan uluslararası bir standartdır.
  • XML (Extensible Markup Language – Genişletilebilir İşaretleme Dili) yapılandırılmış belge ve verilerin evrensel formatıdır
  • XML text tabanlı markup dilidir ve data alış verişinde kullanılan bir standard’ır
  • XML bilginin yapısını tanımlamak için kullanılan bir teknolojidir.
  • XML bilgiyi tanımlayan ve web’te bilgi alış verişi için kullanılan standard bir biçimdir.
  • XML markup dillerini tanımlayan bir metadilidir.
  • XML verinin yapılandırılması ve tanımlanması için kullanılan bir teknolojidir.
  • XML herhangi bir verinin biçimlenmesi,tanımlanması için kullanılan bir teknolojidir.

Yukarıdaki tanımlar birbirine benzemektedir. Bazı kelimeler veri, tanımlama,standart vs.. gibi çok fazla kullanılmış. Tanımlardaki bir farklılık XML’in hem bir teknoloji hem de bir dil olmasından doğmaktadır. Bazı tanımlar sadece XML teknolojisini tanımlarken bazıları dil olarak XML’i tanımlamışlar.

Bütün bu tanımlardan şu sonuçlar çıkarılabilir

  • XML hem bir teknolojidir hem de bir dildir
  • XML dil olarak markup dil’leri yaratmaya yarar.
  • XML verileri tanımlamak için kullanılan bir teknolojidir.
  • XML verileri tanımlamak için bir standart oluşturmak için yaratılmıştır.
  • XML verileri standart bir şekilde tanımladığından web’te veya herhagi iki program arasında veri alış verişi kolaylaştırmaktadır.

Şimdi kendi arkadaşlarımızın ad soyad ve telefon bilgilerini tutabildiğimiz bir XML dosyası oluşturalım.

Kendi kurallarımıza göre oluşturacağımız bu XML dosyasında etiketlerimiz Ad , Soyad ve Telefon olsun ayrıca Telefon etiketinin özelliklerini belirlemek için Tur adında bir Attribute tanımlayalım. Öncelikle XML dosyamızda o belgenin XML olduğunu ve versiyonunu dil desteğini belirten bir satır bulunmak zorunda.  Ve mutlaka bir root (Ana ,Kök) node olmak zorunda.

Kök node u tanımladıktan sonra her bir kişi için ayrı node’larımız olmak zorunda.

Her kayıt için bir node için içersinde tutacağımız bilgilerin etiketlerini tek tek tanımlamalıyız.

Bu şekilde Xml dosyamız içersine bir kişinin kaydını girmiş oluyorum. Eğer eklemiş olduğum etiketlerin bir özelliğini tanımlamak istersem o zamanda bir Attribute (Öznitelik) tanımlamam yeterli olacak.

Umarım yararlı olur bir sonraki yazımda görüşmek üzere.

Bilgi ile Kalın!!!

M.Zeki Osmancık

C# _ Methods 329 374 mezo

C# _ Methods


Merhaba arkadaşlar programları yazarken çoğu kez bir işlemi birden fazla yerde yapmamız gerekebilir.  Bu da her seferinde aynı kodu yazmak anlamına geliyor ve buda bize hem zaman kaybı  hemde kod karışıklığına neden olacaktır. Peki buna çözüm olarak yapacağımız işlemle alakalı koda bir isim versek ve kullanmak istediğimiz yerde o kadar kodu tekrar tekrar yazmayıp sadece ismiyle çağırsak nasıl olur ? Bence süper olur 😀

Metotlar işte bu işlemi yaparlar bir isimle çağırılarak içersindeki işlemleri tek satırda çağırabilmemizi sağlar. Metotları bir işci olarak düşünebiliriz biz ona ne iş yapması gerektiğini söyleriz ve ismini söylediğimizde o iş yapılır.

Örnek olarak bir öğrenci takip programı yaptığımızı düşünelim. Bu program için ilk önce düşünülmesi gereken form Öğrenci Kayıt formudur ve bu form basit olarak aşağıdaki gibi bi görüntüye sahip olacaktır.

En basit işlemi düşünecek olursak doldurulmuş olan textBox ların temizlenmesini istiyorum ve bunun için form içersine bir Temizle butonu yerleştiriyorum ve bu butonda bütün butonları temizliyorum.

private void btnTemizle_Click(object sender, EventArgs e){

txtAd.Clear();

txtSoyad.Clear();

txtTcNo.Clear();

txtDogumYeri.Clear();

txtVeliAd.Clear();

txtVeliSoyad.Clear();

txtTelefon.Clear();

}

Çalıştırdığımda kodlarımın çalıştığını görüyorum tüm alanlar temizleniyor ;).  Buraya kadar bir sorunumuz yok. Peki Kaydet butonuma bastığımda kaydetme işlemleri tamamlandıktan sonra kullanıcının yeni kayıt ekleyebileceğinide hesaba katıp kaydetme işleminden sonrada textBoxları temizlememiz gerekiyor. Aynı kodları tekrar yazarsak sorun kalmaz ama sadece bu kadarla kalmasak ve bu formda 2 den fazla yerde textBoxları temizlemek istesek her seferinde bu kodları tekrar tekrarmı yazıcaz ? Diyelimki yazdık program çalışıyor. Daha sonra okul yönetimi bizden 2 textbox daha koymamızı istedi. Biz yazdığımız Clear kodlarına 2 satır daha eklememiz gerekicek ama bir çok yerde kullandığımız için bir tanesini bile unutsak sıkıntı çıkacaktır. Bu kodları merkezi bir yerde toplasak ve ihtiyacımız olduğunda sadece ismi ile çağırsak nasıl olur ? 😉

Metotda değişiklik yaptığımızda tüm farklı yerlerde kullandığımız kodlarda değişecektir. Gelin nasıl yapıyoruz bu işlemi görelim . Bir Metot tanımlayarak aynı işlemi birden fazla yerde yapalım 😉

Void MetotAdi()

{

Yapılacak işlem

}

private void btnTemizle_Click(object sender, EventArgs e){

Temizle();

}

private void btnKaydet_Click(object sender, EventArgs e)

{

Temizle();

}

private void Temizle()

{

txtAd.Clear();

txtSoyad.Clear();

txtTcNo.Clear();

txtDogumYeri.Clear();

txtVeliAd.Clear();

txtVeliSoyad.Clear();

txtTelefon.Clear();

}

Görüldüğü gibi tek bir metodu yani işçimi sadece adını çağırarak işimi yaptırabiliyorum. 😉

Void metotlar örnekteki gibi sadece içersinde tanımlanan işi yapar. Geriye bir değer döndürmezler.

Metot içersinde yapılan işlem sonucu geriye bir değer döndürmek istiyorsak geriye dönen değer tipinde bir metot oluşturmamız gerekir. Yani işçimize işini yap ama bana yaptığına dair bilgi getir diyoruz. J

Örnek olarak iki sayıyı toplayarak sonucu geri deger olarak döndüren bir metot yazalım.

private void btnTopla_Click(object sender, EventArgs e){

MessageBox.Show(Topla().ToString());

}

int Topla()

{

int sayi1 = 5;

int sayi2 = 6;

int sonuc = sayi1 + sayi2;

return sonuc;

}

Gördüğümüz gibi içeride yapılan işlemin sonucu metodun tipinde olmak zorunda.

Birde içeriye değer gönderebildiğimiz metot tipleri varki buda metot – işçi metaforunu tamamlayan unsurlardan biz işçimizin eline malzemeleri veriyoruz ona sadece o malzemelerle ona söylenmiş olan işi yapmak kalıyor. Ve yine bize bu malzemelerle yaptığı işin sonucunu dönmek zorunda.

private void btnTopla_Click(object sender, EventArgs e){

MessageBox.Show(Topla(5,6).ToString());

}

int Topla(int sayi1 , int sayi2)

{

int sonuc = sayi1 + sayi2;

return sonuc;

}

Ne kadar kolay değilmi ? 😉

Bir sonraki yazımızda görüşmek üzere.


C# _ Diziler _ Foreach Döngüsü 595 199 mezo

C# _ Diziler _ Foreach Döngüsü


Merhaba arkadaşlar bu yazımızda da dizileri anlamaya çalışacağız.  Bu yazı sonunda dzi nedir , nasıl tanımlanır dizilerdeki boyut dizilerin metotları ve foreach döngüsü ile alakalı bilgi sahibi olacaksınız.

Daha önce değişkenler ile ilgili bir yazımız vardı. Hatırlarsak değişkenler program içersinde bize geçiçi süre gerekli olan değerleri tutabildiğimiz yapılardı örneğin int sayi = 5; diyerek 5 sayısını sayi değişkeninde tutabiliyordum. Peki bu sayi değişkeninde birden fazla değer tutmam gerekirse bunu gerçekleştirebilirmiyim ? Cevap değişkenlerle hayır ama Dizilerle evet.

Sizinde anlayacağınız gibi dizi değişkenleri, aynı tipte birçok veriyi bir arada tutmayı sağlar. Benzer işlemlerde kullanılan değişkenler bir dizi altında listelenebilir. Yani ben sayi değişkenimi dizi olarak tanımlarsam o zaman birden fazla değeri içersinde tutabilirim.

Dizilerin tanımını yaptıktan sonra gelin bu dizi nasıl birşeymiş nasıl yazılırmış ona bir göz atalım.  Dizi tanımları veritiplerinin yanında [] simgeleri ile yapılır.

<veri tipi> [] dizi ismi = new <veri tipi> [dizi eleman sayısı]
String[] isimler;İnt[] sayilar;

Float[] paralar;

Byte[] yaslar;

Dizilerin kaç eleman içereceği, dizi tanımlanırken ya da daha sonra belirtilebilir. Şu şekilde tanımlanabilirler:

int[] sayilar = {3, 8, 2, 6};

int[] sayilar = new int[6]{4, 2, 5, 6, 7, 0};

int[] sayilar = new int[5];

Dizilerin indis numaraları 0 dan başlar ve devam eder. Orneğin isimleri tutacağımız bir dizi tanımladık:

string[] isimler = new string[4];

değerlerini atarken yapacağımız işlem şu olacaktır.

İsimler[0]=”Zeki”;

İsimler[1]=” Yudum”;

İsimler[2]=”Ali”;

İsimler[3]=” Orhan”;

Küçük bir dizi uygulaması yapalım. Bir dizi ve elemanlarını tanımlayarak ListBox içersinde bu değeri gösterelim.

İşte bu kadar kolay bir değişken tanımlar gibi fakat içersinde birden fazla değer taşıyabilen bir değişken gibi düşünebiliriz.

Peki birden fazla boyuta sahip diziler tanımlamak mümkünmü ?  Yani tanımladığımız dizinin 1 elemanıda birkaç değere sahip olsa …

Diziler tek boyutlu olduğu gibi, birkaç boyutlu diziler de tanımlanabilir.  Örneğin :

int [,] matris = new int[5,6];

Bu diziyi tanımladığımızda önce 5 elemanlı bir dizi ardından bu dizinin her elemanı içinde 6 elemanlık bir dizi tanımlamış oluruz.  Yani 2 boyut oluşturmuş oluruz.

Bu dizide bir boyut daha olsaydı, o boyutun her elemanı için diğer boyutlardaki 30 eleman bulunacaktı. Çok boyutlu dizilerin eleman sayıları boyutlarındaki eleman sayılarını çarparak hesaplanabilir.

int [,,,,] dizi = new int[boyut1,boyut2,boyut3,… ,boyutn];

Dizilerin boyutlarınada göz attıktan sonra gelin isterseniz bir kaç metodunada bakalım.

Dizilerin Metotları

Array.Resize();

Resize metodu mevcut dizimizin eleman sayısını istediğimiz kadar arttırır. Bir örnekle bakalım bu olaya bir form üzerinde listbox textbox ve butonumuz olsun ve textbox a yazdığımız değer string bir diziye ve listbox a eklensin istiyorum. İlk etapta ne kadar değer girileceğini bilemiyeceğimizden önce 1 elemanlı bir dizi tanımlıyorum ve her eleman eklendiğinde dizi boyutunu arttırıyorum.

Array.Clear();

Dizimiz içersindeki değerleri temizlemek isteyebiliriz işte bu gibi durumlarda Array.Clear kullanıyoruz. Biraz önce yaptığımız proje üzerinde ufak değişikliklerle Clear metodunu inceleyelim.

Foreach Döngüsü

Daha önceki yazımızda bahsettiğimiz döngüler arasında bir tane daha vardı ama ona bu konunun sonunda değinmek daha mantıklı sanki.

Foreach döngümüz bir dizi veya kolaksiyonun her elemanı için yapısındaki kodları çalıştıran bir döngüdür.

foreach (<tip değişkeni > in <koleksiyon> ){

Yapılacak işlemler

}

Bilgiyle Kalın…
M.Zeki Osmancık

C# | OOP Terminolojisi 150 150 mezo

C# | OOP Terminolojisi



Access Modifier : Bir tipe veya tipin üyelerine erişimi sınırlayan private, protected, internal, public gibi kelimelerdir.

Accessible Member : Verilen tip tarafından ulaşılabilen üyedir. Bir tip ile erişilebilen bir üye başka bir üye tarafından erişilebilir olmayabilir.

Accessor : Bir özellik (Property) ile ilişkilendirilmiş Özel (private) veri alanı (data field) üyenin değerini alan veya ayarlayan metodlardır. Okunur-Yazılır özellikler get ve set erişimcilerine sahipken salt okunur özellikler sadece get erişimcisine sahiptirler.

Anonymous Method : Bir delegeye parametre olarak geçilirilen bir kod bloğudur.

Base Class : Türetilmiş sınıf (Derived Class) tarafından miras alınan sınıftır (Inherited Class).

Call Stack : Çalıştırma zamanında (runtime) programın başından başlayarak çalıştırılacak ifadeye kadar olan yapılan metod çağrılarının dizisidir.

Class : Nesneyi tanımlayan, nesneye şablon oluşturan veri tipidir. Sınıflar veri ve veriyi etkileyen metodlardan her ikisini de içerebilirler.

Constructor: Bir sınıf veya yapı üzerinde bulunan ve o tipteki nesneleri oluşturan özel metodlardır.

Delegate : Bir metodu referans eden bir tiptir. Bir delege metoda atandığında tam olarak o metod gibi davranır.

Derived Class : Başka bir taban sınıfın davranışına ve verisine erişmek, geliştirmek veya değiştirmek için miras yöntemini kullanan sınıftır.

Destructor : Örneğin sistem tarafından sonlandırılmasını hazırlayan, sınıf veya yapı üzerindeki özel bir metodtur.

Event : Bir değişikliğin bilgilendirmelerini gönderen sınıf veya yapı üyesidir.

Field: Sınıfın ya da yapının doğrudan erişilen veri üyesidir.

Generics : Jenerikler, bir sınıf ya da metodun bir tip parametresi ile tanımlanabilmesine olanak sağlarlar. İstemci kodu tipin örneğini yaratırken parametre olarak tanımlanan tipi belirli bir tipte değişken olarak tanımlar. Böyle parametrenin hangi tipte olduğu tanımlandığından sınıf ya da metodta o tip olarak kullanılabilir.

IDE (Integrated Development Environment) : Derleyici, debug edici, kod düzenleyici ve tasarım araçları gibi çeşitli geliştirme araçları için birleştirilmiş bir arayüz sağlayan uygulamalardır.

Immutable Type : Örnek yaratıldıktan sonra, örneğinin veri, alan ve özellikleri değişmeyen tiplerdir. Değer tiplerinin çoğu böyle tiplerdir.

Inaccessible Member : Belirtilen bir tip tarafından erişilemeyen bir üyedir. Bir tipe Erişilmez bir üyenin başka bir tipe de erişilmez olması gerektiğine dair bir zorunluluk yoktur.

Inheritance : C#, Miras almayı destekler. Yani bir sınıf (class) taban sınıf (base class) olarak adlandırılan sınıftan türetilir ve aynı metod ve özellikleri miras alır. Bunu sınıfa Türetilmiş Sınıf (Derived Class) denir.

Interface : Sadece public metod, olay ve delegelere ait imzaları içeren bir tiptir. Arayüzü miras alan bir nesne arayüzde imzaları tanımlanan tüm metod, olayları geliştirmek zorundadır. Sınıflar veya Yapılar (Structs) herhangi bir sayıda arayüzden miras alabilirler…

Iterator : Öteleyici, bir sınıfın içerdiği bir koleksiyon veya diziyi (array) sınıf kullanıcılarının foreach ile kullanabilmesine olanak sağlar.

Member : Bir sınıf (class) ya da yapı (struct) üzerinde tanımlana alan (field), özellik (property), metod (method) veya olaylara (events) o sınıfın üyeleri (class members) denir.

Method: Bir sınıf (class) ya da yapı (struct) için davranışı sağlayan isimlendirilmiş kod bloğudur.

Mutable Type : Örnek yaratıldıktan sonra, örneğinin veri, alan ve özellikleri değiştirilebilen tiplerdir. Referans tiplerinin çoğu böyle tiplerdir.

Nested Type : Diğer bir tipi tanımının içinde tanımlanmış tiptir.

Object : Sınıf örneğidir (instance). Bir nesne bellekte bulunur ve verisi ve bu veriler üzerinde etkisi olan metodları vardır.

Property : Özellikler, erişimcileri aracılığı ile bir veri üyesine ulaştırırlar.

Refactoring :
Bilgisayar terminolojisinde bilgisayar yazılımının çıktılarını ve işlevlerini değiştirmeden iç yapısının yeniden düzenlenerek uygulamanın geliştirilmesi, iyileştirilmesi demektir. Kısaca önceden girilmiş kodun tekrar kullanılması diyebiliriz. Visual Studio C# düzenleyicisi akıllıca kodunuzu tekrar biçimlendirebilir. Mesela işaretlediğiniz bir kod bloğunu bir hamleyle bir metoda dönüştürebilirsiniz.

Reference Type : Bir veri tipidir. Referans tipi olarak tanımlanan bir değişken verinin depolandığı konumu işaret eder.

Static : Statik olarak tanımlanan bir sınıf ya da metod “new” anahtar kelimesi ile ilklendirilmeden varolabilir.
Örneğin Main() statik bir metoddur.

Struct : Tipik olarak bazı mantıksal ilişkileri olan değişkenler içermesi için kullanılan birleşik veri tipidir. Yapılar aynı zamanda metodlar ve olaylar içerebilirler. Miras almayı desteklemezken arayüz kullanımını desteklerler. Sınıflar referans tipiyken, yapılar değer tipidir.

Value Type : Öbek (Heap) üzerine yerleştirilen referans tiplerine karşın yığın (stack) üzerine yerleştirilen veri tipidir. Yapı ve null değer alabilen (Nullable) tiplerin de olduğu gibi Nümerik tipleri de içeren Yerleşik (built-in) tiplerin hepsi değer tipleridir. Sınıf tipi ve string tipi referans tipleridir.

kaynak: http://msdn2.microsoft.com/en-us/library/ms173231.aspx

Bilgiyle Kalın…
M.Zeki Osmancık

C# _ Döngüler _ For & While 490 448 mezo

C# _ Döngüler _ For & While


Merhaba arkadaşlar bu yazımızda C# programlama içersinde bulunan döngüleri sizlere anlatmaya çalışacağım. Bu yazının sonunda ardarda işlemleri nasıl kısa yolla yapabilirsiniz, for döngüsü ve while döngüsü ile ilgili bilgi sahibi olacaksınız. Haydi başlayalım… 😀
Döngüler programlarımızda ardarda yada sıralı şekilde yaptıracağımız işlemleri için kullanılır. Fazla kod ,zaman kaybı ve performans açısından yarar sağlarlar. Diyelim ki öğrenci kaydı yapabileceğimiz bir windows form tasarlıyoruz ve bu windows formu üzerinde combobox nesnemiz yer almakta yıl kısmının yanlış yazılmasını engellemek için biz girerek kişinin sadece seçme işlevini yerine getirmek istiyoruz. İlk aklımıza gelen ComboBox nesnemizin items özelliği üzerinden tüm bilgileri girmek oldu değilmi ?

İster items özelliğinden dolduralım istersek kod ile dolduralım yinede bu işlem bize inanılmaz vakit kaybına neden olacaktır. Peki bir kolay yolu yokmu bu işi yapmanın tabi ki var. Döngüler bu konuda bizlere yardımcı oluyorlar.   Yukarıda bahsettiğimiz işlem için sadece döngü kullanmamız yetecektir.

For Döngüsü

for (başlangıç; koşul;artım){

Yapılacak işler;

}

Belirtilen başlangıç değerinden itibaren koşul sağlanana kadar içine yazılan kod parçasını çalıştırır ve bize sıralı işlemlerimizi hızlıca yapmamızı sağlar. Buna göre yukardaki işlemimiz nasıl oluyor görelim.

Ne kadar kolay değilmi ? 😀

Peki bu for döngüsü içersinde bir erken geçiş sağlamak istersek o zaman ne yapmalıyız?

for (int i = 1950; i < 2010; i++){

if (i == 1965)

{

continue;

}

comboBox1.Items.Add(i.ToString());

}

Biraz önce ki doldurma işlemi sırasında bir koşul sağlanıyorsa o koşulun sağlandığı değeri atlayarak döngü devam eder. Yani burada i 1965 olduğunda o satırdaki işlemi atlayacak ve 1966 dan devam edecek

Continue ile oluşan işlemi anladıysak birde koşul sağlandığında döngü işlemine son veren bir kodumuz daha var :

Break

for (int i = 1950; i < 2010; i++){

if (i == 1965)

{

break;

}

comboBox1.Items.Add(i.ToString());

}

MessageBox.Show(“Döngü Sonlandırıldı.”);

Yine aynı işlem için break işlemi yapıldığı zaman koşul sağlanıyorsa döngüden çıkarak sadece 1965 e kadar olan sayıları ComboBox nesnesi üzerine ekler.

Return

Bir döngünün sonundaki erken geçişi sağlar koşul sağlanmıyorsa hiç bir işlem yapmadan çıkar.

for (int i = 1950; i < 2010; i++){

if (i == 1965)

{

return;

}

comboBox1.Items.Add(i.ToString());

}

MessageBox.Show(“Döngü Sonlandırıldı.”);

While Döngüsü

Bir başka döngü türü olan while bir koşul sağlanıyorken dönmeye devam eden döngü çeşididir. Koşul false ise döngü sona erer.

while(koşul){

Yapılacak işler;

}

Aynı örneğimizi While ile yaptığımızda bu kez biraz syntax değişiyor ama yaptığımız işlem aynı.

Koşulumuz sağlandığı sürece yani i 2010 dan küçük olduğu sürece işlemimizi sürdürdü ve yine aynı örneğimizdeki Combobox itemlerini ekledik.

While i en güzel anlatan örnek belkide Eşşek Sudan Gelinceye Kadar Dayak Yemek deyimi.

Hadi gelin bu örneği yapalım 😀

Do While Döngüsü

Diğer döngülerden farkı koşul sonda kontrol edilir. Buda döngünün en az 1 kere çalışacağı anlamına gelir.

Do{

Yapılacak işler;

} while (koşul);

Bilgiyle Kalın…
M.Zeki Osmancık

ASP.Net _ Data Cache 1024 608 mezo

ASP.Net _ Data Cache


Merhaba arkadaşlar bir önceki yazımızda sayfamızı bir bütün olarak nasıl  cache leyebileceğimizi gördük . Bu yazımızda ise senaryomuz farklı . Bir e-ticaret sitemizin olduğunu varsayalım ve bu sayfa üzerinde birden fazla alan bulunmakta kategoriler, markalar, yeni ürünler , indirimli ürünler gibi ayrı ayrı ama hepsi veritabanından gelen veriler bulunmakta. Bu sayfamızı bütün olarak cache e koyduğumuzda ürünlerde indirimli ürünler gibi sürekli değişebilirliği bulunan alanlarda aynı cache içersinde bulunacağından değişiklikler kullanıcılara yansımayacaktır. Peki nasıl olacak bu iş ?
Biz sayfamız içersinde değişmeyecek alanlarımızın olduğunu biliyoruz örneğin kategoriler markalar gibi alanlar bunlar kolay kolay değişmez yada güncellenmez. Sayfayı komple cache işlemine almaktansa sadece bu alanların doldurulduğu DataTable nesnesini cache işlemine alsak yani sadece sayfada istediğimiz alanları cache işlemine dahil etsek  süper olmaz mı ? Tıpkı aşağıdaki resimdeki alanlar gibi.

İşte bu işlemide data cache ile yapabiliriz kullanımı OutputCache den biraz farklı ama eminimki seveceksiniz.  Bu işlem için DataTable döndüren bir property  e ihtiyacım olacak bu property içersinde bilgileri alıp cache işlemine dahil edeceğiz.

Property ‘miz hazır artık içersine bir Datable gönderdiğimizde içersinde cache işlemini yaparak tekrar cache lenmiş datatable döndürecek.  Bu property i hazırladıktan sonra işimiz çok kolay sadece en basit olarak datalarımızı veritabanından çekmek kalıyor.

Datamızı çekerken bir noktaya dikkatinizi çekmek istiyorum öncelikle MyData boşmu diye kontrol ettikten sonra bağlantımızı kurup sorgumuzu yollayıp verilerimizi alıyoruz ve Datatable ile karşıladığımız verilerimizi MyData ya atıyoruz. Ardından Repeater nesnemizin DataSource ‘ una MyData yı verdiğimizde cachelenmiş veri nesnemizin veri kaynağı olarak belirleniyor ve belirtilen süre içerisinde  bu veriler diğer alanları etkilemeyecek şekilde cache işlemine dahil edilmiş oluyor. Fakat bu işlemi uyguladığımızda  eğer veritabanında değişiklik olursa ve belirttiğimiz cache süresi bitmeden sayfaya istekte bulunursak görünürde bilgiler hiç güncellenmiyormuş gibi görünecek çünkü MyData içersinde veriyi cache işlemine dahil ederken kullandığımız Cache.NoAbsoluteExpriration deyimi cache süresinde kayma yapar.

Yani cache süremizi 30 dakika olarak düşünürsek ilk sayfa için istekte bulunulduğunda datamız cache lenecek daha sonra 30 dakika hiç istek olmazsa veritabanından yeni verileri çekerek yeni bir cache oluşturacak. Peki ya bu 30 dakika dolmadan 15. Ci dakikada bir istekte bulunulursa o zaman ne oluyor ? o zamanda “sliding” yani kaydirma işlemi yapılarak istekte bulunulduğu dakikaya bir 30 dakika daha ekleyerek cache süresini uzatıyor.  Yani 12:00 da istekte bulunulan sayfada cache yenileme süresi 12:30 oalcaktır fakat 12:15 de  tekrar bir istekte bulunulduğunda cache in yenilenme süresi 12:45 olarak değişecektir.

Bu yöntemden başka yöntemlerde var.  Biz MyData içersine datatable gönderdiğimizde içerdeki işlemler sırasında eğer NoAbsoulateExpiration değilde NoSlidingExpiration kullanırsak bu kez bizim sayfa isteklerimizi dikkate  almadan sadece belirttiğimiz cache süresinin bitmesini bekleyecek ve süre bitiminde cache işlemini yeniler.

Böylelikle sayfamız içersinde belirttiğimiz üzere birden  fazla database ile ilgili bölüm olsada biz sadece Kategoriler bölümünü yada sadece markalar bölümünü Cache işlemine dahil etmiş olacağız bu bilgi için tekrar tekrar DB ye bağlanmak zorunda kalmayacağız.

Umarım yararlı olur. Görüşmek üzere.

Bilgiyle Kalın…
M. Zeki Osmancık

ASP.Net _ Output Cache 469 492 mezo

ASP.Net _ Output Cache


Merhaba Arkadaşlar
Bu yazımda sizlere ASP.Net ile dinamik web siteleri yaparken performansı etkileyecek bir yapıdan bahsetmek istiyorum. Genellikle bu tip web sayfalarında veriler veritabanından çekilir. Bir sayfada, her seferinde veritabanına bağlanmak ve özellikle farklı tablolardan veri çekiyorsak, performansı önemli derecede etkiler .Herseferinde veritabanına gidip farklı tabloları bulup verileri web sayfası üzerine çekmek sayfayı yavaşlatır kullanıcıyı usandırır. Yavaş bir web kullanıcı üzerinde negatif bir etki yaratır. Bunun için ne yapmak gerekiyor peki ?
Sayfalarımızda bulunan verinin güncellenme sıklığına göre belirli bir süre tüm verileri Cache işlemine tabi tutsak ve kullanıcı sayfayı çağırdığında her seferinde veritabanına bağlanmaktansa cache te var olan veriyi göstersek çok daha performanslı olmazmı ? Belirtilen süre bittiğinde ise 1 sefer gidip veritabanından bilgileri alıp tekrar cache içersine doldurduğumuzda tadından yenmez . 😀
Peki sayfamızı Cache dediğimiz yapı içersine almak için ne yapmak gerekiyor ?

Yapmamız gereken sadece aspx sayfamızın ilk satırlarına yukardaki yapı gibi
<%@ OutputCache Duration=”30″ VaryByParam=”none” %> kodunu eklemek olacak böylelikle sayfamız outputcache ile komple cache işlemine tabi olacak ve Duration kısmında belirttiğimiz saniye cinsinden süre kadar cache de kalacak. Sizde bir sayfa üzerine basitçe veritabanından veri çekerek bu işlemi uygulayın ve veritabanını güncelledikten sonra sayfanızıda güncelleyin verdiğiniz Duration süresi boyunca sürekli güncellemeden önceki bilgiler gelecek.Duration süresi bittikten sonra tekrar veritabanına bağlanarak tekrar bir cache yapacaktır. Bunu sizin de yapmanızı istedim çünkü etkisini mutlaka görmelisiniz.

Senaryomuz şu olsun : Diyelimki biraz önce belirttiğim sayfanız üzerine çektiğiniz bilgi ürün kategorileri olsun. Bu kategoriler hangi sıklıkla güncellenir? Ancak yeni bir ürün grubu geldiğinde değilmi ? Buna göre sayfa üzerinde  sürekli veritabanına bağlanıp güncel kategori bilgileri ile dönmesinin bir anlamı olmaz. Bu sayfayı 1  günlük cache işlemine aldığımızda ilk kullanıcı sayfayı açtığında veriler cache atılacak daha sonra tüm gün veritabanına bağlanmayacak SqlServer için ne kadar rahatlatıcı değilmi ?J

Kategorilerin olduğu sayfayı cache e attık çok güzel!  Birde bu kategorilere tıkladığımzda o kategoriye ait olan ürünleri gösteren bir  Ürünler sayfamız olsa ve QueryString ile gelen kategoriID si ne göre ürünleri gösterse ve bu ürünler sayfasınıda Cache atmak istesek aynı işlemi uygulasak ????

Belirttiğimiz süre içersinde hangi kategoriye tıklarsak tıklayalım hep aynı kategoriye ait ürünler görülecektir.

Bu sorunuda <%@ OutputCache Duration=”30″ VaryByParam=”CatID” %>  kodu içersinde belirttiğimiz VarybyParam değeri ile düzenleyebiliyoruz. Bu değer bize cache işleminin hangi parametrelere göre yapılacağını belirttiğimiz bir değer. Buna göre VaryByParam değerine querystring deki kategoriID sini taşıyan parametreyi verirsem kategoriler sayfasında kategorilerden hangisine tıklarsam tıklayayım diğer sayfadaki cache işlemi o kategoriID sine göre düzenlenerek bize farklı kategorilerdeki ürünlerinde görüntülenmesini sağlayacaktır.

Her zaman kategori bilgisini farklı sayfadan göndermeyebiliriz. Bir sayfa içersinde bir dropdownlist içersine listelenmiş kategori bilgileri ilede aynı sayfa üzerinde ilgili ürünleri listelediğimizi varsayarsak. Aynı  yöntemle yapmaya kalkarsak yine sorun çıkacaktır çünkü burada parametre olarak querystring kullanmıyoruz bir kontrol kullanıyoruz. Bu kez ise VaryByParam yerine VaryByControl kullanıyoruz.  <%@ OutputCache Duration=”30″ VaryByControl=”DropDownList1″ %>

Parametrenin hangi değere göre cache işlemine gireceğini değeri nereden alacağını belirtmiş oluyoruz. Böylece aynı sayfa içersinde bulunan controllerin durumuna görede cache işlemini şekillendirmiş oluyoruz.

Gelin biraz işin içine , işin dibine , işin altında yatan koca ayzberge (iceberg)  bakalım 😀

OutputCacheModule ASP.Net içersinde bir HTTP Modul olarak implement olmuştur ve  System.Web.Caching namespace i içersinde yer alır. Bu modül sayfa içersindeki isteklerin yaşam alanı içersinde  gerçekleşecek olan olayları dinler ve ilgili bir olay(event) çalışırsa harekete geçer.HTTPModule  OutputCacheModule’ e ,  ResolveRequestCache ve UpdateRequestCache olayları ile katkıda bulunur.  ResolveRequestCache olayı tetiklendiğinde, modul gelen isteğin sonucunda dönecek olan sayfanın outputcache dahilinde olup olmadığına karar verir. Eğer cache işlemi varsa cache version bilgisi döner,cache bilgisi yoksa sayfa normal render edilir.  Geriye dönen cache bilgisine göre UpdateCacheModule çalışır. Bu modül çalıştığı zaman ise render edilen sayfa cache işlemine alınır.

Aşağıdaki diagram outputcachemodülünün çalışmasıyla ilgili bir fikir verecektir.

Başka yazılarda tekrar görüşmek üzere

Bilgiyle Kalın…
M.Zeki Osmancık

 

C# _ Karar Yapıları _ If-Else & Switch 522 236 mezo

C# _ Karar Yapıları _ If-Else & Switch


Gerçek hayatta bizlerin bazı kararlar almak zorunda kaldığımız gibi programımızada karar alma yeteneğini kazandırabiliriz çıkabilecek tüm sonuçları değerlendirerek ilgili işlemi yapabilecek duruma gelebilir. Kısacası programımıza düşünme yeteneği kazandırabiliriz.

If – Else Karar Yapısı

If..Else deyimi bir Boolean ifadeyi degerlendirerek program denetimi belirtilen deyim gruplarına geçirir. Basit bir örnek olarak tatile çıkmak istiyorsunuz ve mevcut paranız 500 lira. Afirmasında  1 haftalık tatil 900 lira   ,Bfirmasında 850 lira ,Cfirmasında 450 lira ,Dfirmasındada 300 lira bu 4 firma arasında seçim yapmak gerekirse ilk iki firmayı eledik bile. C ve D firmaları arasındaki seçimimizede orada yapacağımız harcamaları göz önünde bulundurarak değerlendirecek olursak en uygun D firması olacağına karar veririz. İf yapılarıda bu şekilde çalışır. İf karar blogları aşağıda belirtilen formatta yazılır.

Bir çok program ve web sitesinde gördüğümüz kullanıcı adı ve şifrenin doğru olduğuna karar verdiğimiz basit bir program yazalım.

Swicth – Case

Mantık olarak “if else” koşul yapısına benzer. Kendisine gönderilen parametreyi değerlendirir ve ona göre ayrılan kod bloğunu çalıştırır. Yani eleme yaparak parametrenin sahip olduğu değeri ile eşitlenen kod bloğunu çalıştırır.

switch(değişken)

{

case kosul1:

//kodlar bu panele gelecek

break;

case kosul2:

//kodlar bu panele gelecek

break;

case kosuln:

//kodlar bu panele gelecek

break;

default:

//eğer hiç bir koşul desteklenmiyorsa bu koşul gerçekleşecek

break;

}

Bilgisayarımızın saatini kontrol ederek günün çeşitli zamanlarında bize karşılama mesajı çıkartan bir uygulama yazalım

Bilgiyle Kalın…
M.Zeki Osmancık

Algoritma 503 345 mezo

Algoritma


Algoritma Nedir?

Algoritmalar bir işin nasıl yapıldığını adım adım hangi etaplardan geçerek gerçekleşeceğini gösteren bir çalışma planıdır aslında. Algoritmalar  programlama dili değildir  sadece programlama dillerine klavuz görevi gören bir yöntem dizisidir.Algoritmalar yazılı şekilde olabileceği gibi semboller dizilimi ilede  karşımıza çıkabilirler.

Algoritmalardaki yöntemler sırası

  • Veri Girişi
  • İşlem
  • Kararlar

Veri Girişi : Yapılan uygulamaların runtime kısmında kullanıcı tarafından girilecek olan verilerdir.

Kararlar: Karar ve kontrol yapıları algoritmanın akışını yönlendiren önemli kavramlardır. Girilen veya işlem sonucu elde edilen veriler kontrol edilerek algoritma istenilen yere yönlendirilir.

İşlem: Algoritmada belirtilen kararlar ve girilen veriler ile hangi işlemlerin gerçekleşeceğini belirtiğimiz yöntemlerdir.

Özellikleri

  • Girdi: Sıfır veya daha fazla değer dışarıdan verilmeli.
  • Çıktı: En azından bir değer üretilmeli.
  • Açıklık: Her işlem (komut) açık olmalı ve farklı anlamlar içermemeli.
  • Sonluluk: Her türlü olasılık için algoritma sonlu adımda bitmeli.
  • Etkinlik: Her komut kişinin kalem ve kağıt ile yürütebileceği kadar basit olmalıdır.

Akış Diagramları

Bu diagramlar daha anlaşılır bir  yapıya sahip olmaları için bazı semboller ile belirtilen algoritma yöntemidir.Akış diagramları farklı semboller yardımı ile hazırlanırlarşekilleri itibari ile anlaşılması kolay problem çözümünde

yardımcı bir yöntemdir. Şimdi bazı diagram şekillerini tanıyalım ve bir işlemin algoritmasını çizelim.

Çay Demleme İşleminin Algoritması

•      Kullanıcıdan su verilmesi beklenir.

•      Suyu ısıtma işlemi yapılır

•      Suyun kaynadığı kontrol edilir. Kaynamamışsa ısıtmaya devam eder

•      Demliğe çay konulur.

•      Kullanıcıdan alınan demleme bilgisi ile şimdiki zaman toplanır ve süre bulunur .

•      Şimdiki zaman küçükse çay demlenmeye devam eder.

•      Çayın demlendiği mesajla bildirilir.

Çay Demleme İşlemi Algoritma Diagramı

Bilgiyle Kalın…
M.Zeki Osmancık

C# _ Hatalar ve Giderilmeleri _ Try-Catch 353 238 mezo

C# _ Hatalar ve Giderilmeleri _ Try-Catch


Hata Nedir ?

Programcılar veya programı kullanacak olan  son kullanıcılar kimi zaman bazı kullanım yada mantıksal hatalar yapabilirler. Bu hatalar gözden kaçabilen mantıksal hatalar olabilir son kullanıcının programı kullanması sırasında veya test aşamasında karşımıza çıkabilir. İşte bu hataların giderilmesi hata çıktığı anda işlem kod bloğunu terk etmesi için işlemlerimizi try bloğu içersinde yazıyoruz bu blog içersinde bir hata meydana geldiğinde catch bloğu ile hata durumunda ne gibi bir işlem yapacağımızı belirtiyoruz.

Hatanın Yakalama

Örnek olarak iş yerimizde çalışan sarışın bir sekreterimiz için 2 sayıyı toplaması için çok basit bir hesap makinesi yazmış olalım. Sekreterimiz bu hesap makinesini kullanırken sayısal değerler kullanmak zorunda. Peki sayısal olmayan bir değer girdiğinde programın tepkisi ne olacaktır ?

Bu sorunu program içersinde hata kontrolü yaparak çözebiliriz. Eğer işlem bloğumuzda hata oluşursa hata yakalanacak işlemden çıkacak ve hata durumunda ne yapmasını istemişsek onu yapacak.

Finally

Birde programlarımızda hata olsun yada olmasın çalışmasını istediğimiz bazı kodlar yapılmasını istediğimiz işlemler olacaktır. Bunlar hata çıkması durumunda bile çalışacak olan kod bloklarıdır. Finally blogu içersinde yer alan kodlar her ne hata olursa olsun çalışacaktır.

Bilgiyle Kalın…
M.Zeki Osmancık

C# _ Değişkenler ve Veri Tipleri 507 316 mezo

C# _ Değişkenler ve Veri Tipleri


Merhaba arkadaşlar bu yazımda sizlere değişkenler denilen yapıları anlatmaya çalışacağım. Haydi başlayalım 😉

Değişken nedir nasıl tanımlanır?
Bir program çalıştırırken tüm veriler geçici olarak hafızada tutulur. Değişkenler bu verilerin isimlendirilmesi işlemidir. Değişken mantığı günlük yaşamdada çok kullanılan bir mantıktır aslında. Aklımızdan iki sayı tutmamız istendiğinde ve bu sayılarla alakalı işlem yapmamız istendiğinde aslında isimlendirecek olursak sayi1 ve sayi2 olarak o sayıları aklımızda tutuyoruz. İşte bu sayi1 ve sayi2 sadece o an geçiçi bir süre içinde işlem yapmamız için kafamızda ürettiğimiz değişkenlerdir. Programlamadada geçiçi olarak veri tutmak istediğimizde değişkenleri kullanırız.
<veri tipi> <değişken adı>; şeklinde tanımlanırlar.
string isim;
int rakam;
Tanımlama Kuralları
•Tanımlanan değişkenlerin tipleri değişken isminden önce belirtilir.
•Değişken isimlerini belirlerken bazı noktalara dikkat etmek gerekir. Boşluk, nokta, soru işareti, noktalı virgül, çift tırnak, tek tırnak, aritmetik  operatörler, karşılaştırma ve atama operatörleri, parantezler kullanılamaz.
• Sayı ile başlayamaz.
•Visual C#.NET dilinde tanımlı anahtar kelimeler kullanılamaz.
•Değişken isimlerinde Türkçe karakter kullanılırsa, farklı dil seçenekli işletim sistemlerinde çalışma anında hata üretecektir.

Veri Tipleri

Değişkenler program içinde, tuttukları verilere ulaşmak için kullanılır. Ancak değişkenlere ulaşmak, tanımlandıkları yerde veya alt  bloklarda mümkündür. Bu kavrama değişkenlerin kapsam alanı (Scope) denir.
Kapsam alanı dışındaki bir yerden değişkene ulaşılamaz.

Veri tipi, değişkenlerin tuttukları değerlerin türünü ve bellekte tutulacak boyutunu tanımlar. Değişkenleri veri tipleri ile tanımlarken verinin  boyutuna göre bir veri tipi seçilmelidir. İki tip veri tipi mevcuttur Değer Tipleri (Value Type)  ve Referans Tipleri (Reference Type)

Değer Tipleri (Value Type)

Değer tipleri veriyi direk olarak bellek bölgesinden alırlar

Referans Tipleri (Reference Type)


Visual Studio 2008 Genel Bir Bakış 500 339 mezo

Visual Studio 2008 Genel Bir Bakış


Merhaba Arkadaşlar.

Yazıya başlamadan önce sizleri bir terim ile alakalı bilgilendirmek istiyorum bu terim ; IDE  sakın harddisklerdeki bağlantı türü ile karıştırmayın 😉 IDE = Integrated Development Environment yani Entegrasyonlu Geliştirme Platformu programların gelişme aşamalarının gerçekleştiği platformlardır. Farklı diller için farklı IDE ler geliştirilmiştir.

Biz bu IDE ler içersinde en gelişmiş olanını kullanacağımız için bende bu gelişmiş IDE yi sizlere basitçe tanıtmak istedim. Kullanacağımız IDE :

Visual Studio

Teknolojisini basit cümlelerle anlatmak zor elbette ama özetlemek gerekirse çok gelimiş özelliklere ve yardımcı araçlara sahip bir IDE dir. Sadece tek bir dil için geliştirilmemiştir bir önceki yazımızda bahsettiğimiz  .Net uyumlu tüm programlama dillerinin desteklendiği ve aynı projelerde dahi çalıştırılabildiği bir ortamdır.  Program geliştirenlere kullanışlı ve kolay bir ortam sağlayarak uygulamaların daha işlevsel olması konusunda bizlere destek sağlar.

Peki ne var bu Visual Studio nun içersinde.

Visual Studio’yu genel görünüm olarak 4 bölümde inceleyebiliriz;

*Çalışma Sayfaları

*Araç Çubukları

*Menüler

*Pencereler

Visual Studio programımızı ilk açtığımızda bizi Başlangıç sayfası karşılıyor ve bizlere (eğer internete bağlıysak) MSDN den çeşitli gelişme ve haberleri sunuyor. Visual studio içersinde web sayfalarıda açabiliyorsunuz bu arada. Start Page başlangıç sayfamızın bulunduğu kısma daha sonra projelerimizi yazacağımız sayfalarda geliyor işte bu alana Çalışma Sayfaları diyoruz. Sekmeler halinde pencerelerle çalışabileceğimiz bu çalışma alanı hem form veya web sayfaları tasarımlarında hemde kod yazarken çokça kullanacağımız bir alan olacaktır.

İkinci olarak çoğu programda gelenek haline gelmiş olan Araç Çubuklarımız var. Bu araç çubukları menü komutları için görsel kısayollar sunarak işimizi kolaylaştırırlar. Benzer işlemler aynı araç çubuğu üzerinde gruplanarak kullanım dahada işlevsel hale gelir. Yada istersek biz bu araç çubukları üzerindeki görsel kısayolları değiştirerek kişiselleştirebiliriz de.

Üçüncü olarak hemen hemen her programda  görmeye ve kullanmaya aşina olduğumuz Menüler aslında tüm programlarda benzer niteliklerdedir. Çeşitli komut ve yardımcı pencerelere ulaşmamızda bize kolaylık  sağlarlar.

Menülerde bulunan temel başlıkları kısaca tanıyalım :

File: Adındanda anlaşılacağı gibi dosya işlemlerinin yapıldığı menüdür yeni proje yada varolan projelerin açılması gibi işlemleri bu menü seçeneği içersinde bulunan seçeneklerden yönetebiliriz.

Edit : Tüm yazı ile ilgili düzenleme işlemlerinin yer aldığı menüdür. Kopyala Kes Yapıştır Bul Değiştir gibi seçenekleri mevcuttur.

Project: Üzerinde çalıştığımız projenin özelliklerinin yönetilebileceği referans ve dosya ekleme çıkarma gibi işlemlerin var olduğu menüdür.

Built: Geliştirdiğimiz projelerin çalıştırılmak üzere içersinde bulunan komutların derlenmesi için gereken komutlara ulaşabildiğimiz menüdür.

Debug : Adındanda anlaşılacağı gibi Hata bulma ve ayıklama ile ilgili tüm seçeneklerin bulunduğu menüdür.

Tools : Visual Studio ile birlikte yüklenen yardımcı araçların bulunduğu menüdür. Ayrıca Visual Studio ile alakalı ayarların yapılabildiği Options seçeneğide bu menü  altında yer alır.

Ve Help menüsü sanırım bunun açıklamasına gerek yoktur. =)

Visual Studio içersindeki yolculuğumuza devam edelim çalışma sayfaları araç çubukları menüler derken son olarak belirttiğimiz Pencereler  seçeneğine geldik

Dördüncü ve son olarak bahsedeceğimiz Pencerelerden kasıt ise Visual studio içersinde uygulama geliştirme aşamasında sık sık kullanılabilecek olan birçok elemanı bir araya getiren yada durum belirten pencerelerdir.

Bu pencerelerden çok kullanılan bir kaçını tanımlamak gerekirse:

Properties: Projedeki tüm öğelerin özelliklerinin yer aldığı bir penceredir. İstenen değişiklikleri yine bu pencere üzerinden gerçekleştirmekde mümkündür.

ToolBox :Projelerde kullanılan çeşitli kontrollerin listelendiği penceredir. Buradaki öğeler sekmeler içersinde gruplanmıştır.

Solution Explorer : Projeler bir solution (çözüm) içersinde yer açılır. Bir çözüm içersine farklı dilde ve tipte projeler dahil edilebilir.Bu pencere solution yapısını gösterir ve ilgili işlemlerin yapılmasına olanak sağlar.

Uygulama geliştirirken en çok kullanacağımız pencereler olacaktır.

Visual Studio yu basitçe olsa tanımış olduk geliştirme ortamını etkin bir şekilde kullanmak önemlidir. Bu yüzden bu yazının klavuzluğunda  sizde biraz merak ile Visual Studio içersinde ne var ne yok karıştırarakda bulabilirsiniz.

Görüşmek Dileğiyle.

Microsoft .Net ‘ e Giriş 547 203 mezo

Microsoft .Net ‘ e Giriş

Merhaba arkadaşlar programlama ile alakalı ilk makaleme tabiki işin en başından başlamam gerekiyor.  Elimden geldiğince size yararlı bilgiler sunmaya çalışacağım.Programlama dilleri ile ilgileniyorsak bu kelimeyi cok duymussunuzdur.
.NET
Peki nedir bu .Net denilen şey ?Tek başına tanımlanamayacak bir sistemler bütünüdür aslında; Microsoft tarafından geliştirilen  farklı teknoloji , araç ve programlama dillerinin bir arada, tek bir iskelet üzerinde çalışmasına olanak veren uygulama geliştirme platformudur.
Uygulama derken neyi kastettim peki , aslında o kadar geniş bir kavram ki .Net platformunda uygulama diyorsak eğer  aklınıza gelebilecek her türlü uygulamayı bu kelime içersine sığdırabiliriz. Web ,Windows,Mobile vb bir çok uygulamayı geliştirmemize olanak tanır .
.Net güzel bir şeymiş tanımını duyunca heyecanlandık . Nasıl çalışır peki ? Nasıl bu kadar geniş bir çerçevede programcılara özgürlük sunabilir. Gelin .Net içersinde kısa bir yolculuk yapalım:
Öncelikle .Net ile uygulama geliştirebilmemiz için onun kaynağını bilgisayarımıza yüklemiş olmamız gerekiyor.   BCL (Base Class Library ) Temel Sınıf Kütüphanesi  adı verilen bu kütüphane uygulama geliştirmek için gerekli olan arayüz ,sınıf ,fonksiyonları barındırır bizlerde bu arayüz sınıf ve fonksiyonları kullanalarak uygulamalarımızı kolayca geliştirebiliriz.
.Net çok güzel  ve kütüphane olmak zorunda bunları öğrendik   peki asıl soru geliyor hangi programlama dilini kullanmak gerekiyor?
Microsoft bu soruya bizim için çok radikal bir biçimde karar vermiş bile .Net platformunu destekleyen herhangi bir programlama dili cevabı sanırım bizim için yeterli . Her .Net uyumlu dilin kendine özgü bir derleyicisi vardır. Herhangi bir dilde yazılmış uygulama derlendiğinde o dilin derleyicisi kodları ortak bir dile çevirir.
Oluşan bu ortak dilin adı ise MSIL (Microsoft Intermediate Language) yani Microsoft un Ortak Dili . .Net platformu destekli programlama dillerinden herhangi biri veya birden fazlası ile bir uygulama geliştirdiğimizde o dilin derleyicileri  kodları alıp MSIL e çevirerek hepsinin aynı anda makine diline çevrilmesini sağlar.
Buraya kadar geldik yolculuğumuz sürüyor uygulamamızı yazdık derledik  MSIL e çevirdik daha sonra bu kodların işletim sistemine ulaşması gerekiyor yani makine kodlarına çevrilmesi gerekiyor bu işide
CLR devralıyor ve MSIL kodlarımızı alıp makine koduna çeviriyor ve işletim sistemine iletiyor.
Bu işlemi yaparken JIT (Just In Time) derleme yöntemini kullanarak görevini tamamlıyor.
Böylelikle  .Net platformunda geliştirdiğimiz bir uygulamamızın hangi devrelerden geçerek karşımıza geldiğini ve azda olsa .Net platformunun mantığını umarım anlayabilmişsinizdir.
Sonraki Yazılarda Görüşmek Üzere…

    Join our Newsletter

    We'll send you newsletters with news, tips & tricks. No spams here.