Betül SARAL

Bilgisayar Mühendisi

Matlab - Solution Methods for Systems of Linear Equations

| Comments

GAUSS ELIMINATION YÖNTEMİ

Gauss yöntemini matlab yardımı ile gerçekleştirmek için aşağıdaki program kullanılabilir.

test.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
	% AX = B ise
	
	a = [1 -3  4 -5;2 4 6 8 ;4 3 2 1 ; 5 3 1 -3];  % ilk matrisimiz
	b = [-11  42 -11 -38]';  	% sonuç matrisimiz

	a(:,length(a)+1)=b;   % Arttırılmış matrisimizi oluşturduk.
	[rows cols]=size(a);  % matrisimizin boyutlarımızı bulduk.

	for i=1:cols
		for j=i+1:rows
			tmp=a(i,:).*(-a(j,i)/a(i,i));
			a(j,:)=tmp+(a(j,:));
		end
	end
	
	for i=length(1:rows)-(1:rows)+1
		if(i<cols-1)
			a(i,cols)=a(i,cols)-(sum(a(i,i+1:cols-1)));
		end
		sonuc(i)=a(i,cols)/(a(i,i));
		a(1:i-1,i)=a(1:i-1,i).*sonuc(i);
	end

	
	disp('Sonuc = ');
	disp(sonuc)

TERS MATRİS YÖNTEMİ

Ters matris yöntemini matlab yardımı ile gerçekleştirmek için aşağıdaki program kullanılabilir.

Terminal
1
2
3
4
5
6
7
8
9
	clc
	clear

	% AX = B  => A.A^-1.X = B.A^-1  => I.X = B.A^-1 =>  X = B.A^-1

	A = [2,-3,2;1,1,-2;3,-2,-1];
	B = [-11,8,-1]';

	X = inv(A)*B  	% inv(A) matrisimizin tersini alır ve B ile çarptıktan sonra x değerlerimiz bulunur.

<aCRAMER YÖNTEMİ

Cramer yöntemini matlab yardımı ile gerçekleştirmek için aşağıdaki program kullanılabilir.

Terminal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
	clc
	clear

	A=[3,4,-5;-2,-5,7;-7,2,-3];
	B=[-47;56;15];

	A1 = A;
	A1(:,1) = B;
	A2 = A;
	A2(:,2) = B;
	A3 = A;
	A3(:,3) = B ;

	D=det(A);
	D1=det(A1);
	D2=det(A2);
	D3=det(A3);

	X(1)=D1/D;
	X(2)=D2/D;
	X(3)=D3/D   % sonuc %

SECANT YÖNTEMİ

Sekant yöntemini matlab yardımı ile gerçekleştirmek için aşağıdaki program kullanılabilir.

Terminal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
	clc
	clear
	syms x;  	% x atamaları için
	i = 1;a = 1;  b = 2;
	err = 0.000001;
	f = inline(10 * exp(-x/2)*(cos(6*x)+sin(8*x)));  %fonksiyonu tanımlamak için inline kullanılır.
	c = (a*f(b) - b*f(a))/(f(b) - f(a));   %secant yöntem işlemi
	while abs(f(c)) > err
		a = b;
		b = c;
		c = (a*f(b) - b*f(a))/(f(b) - f(a));
		disp([a f(a) b f(b) c f(c)]);
		i = i + 1;
		if(i == 8)
			break;
		end
	end
	disp(['Kökümüz = ' num2str(c)]);

Matlab - İki Resim Arasında Fark Bulma

| Comments

İki resim arasındaki farkı Matlab yardımı ile bulalım.

Resim-1 Resim-2
Terminal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
im1 = rgb2gray(imread('fark1.bmp'));
im2 = rgb2gray(imread('fark2.bmp'));

fark = imabsdiff(im1,im2);
bw = bwareaopen(fark,55);
bw = imfill(bw,'holes');
SE = strel('square',1);
bw2 = imerode(bw,SE);
fark = regionprops(bw2, 'all');
c = [fark.Centroid];

imshow('fark2.bmp');
title(['Toplam fark : ',num2str(length(fark))]);
hold on;
x = c(1:2:end);
y = c(2:2:end);
plot(x,y,'yo','MarkerSize',20,'LineWidth',4);

Program çıktımız :

Matlab - Arkaplan Çıkarımı

| Comments

Matlab kullanarak aşağıdaki resmin arkaplanını çıkartan bir uygulama yapalım.

Resim-1 Resim-2
Terminal
1
2
3
4
5
6
7
8
9
10
11
12
13
input = imread('kapi_biri.bmp');
im1 = rgb2gray(imread('kapi.bmp'));
im2 = rgb2gray(imread('kapi_biri.bmp'));

im3 = imsubtract(im1,im2);
im3 = bwareaopen(im3,500,8);
im3 = imfill(im3,'holes');
im3=uint8(im3);

im3(im3 == 255) = 1;
im33 = cat(3, im3, im3, im3);
im = input .* im33;
imshow(im);

Program çıktımız :

Matlab - Bozuk Para Sayma

| Comments

Matlab kullanarak aşağıdaki resimde ne kadar bozuk paramız var onu bulmaya çalışalım.

Programımız aşağıdaki gibidir.

test.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
	img = imread('image3.jpg');
    th = graythresh(img);
    bw = imcomplement(im2bw(img,th));  %gri seviyeli resimlerde negatiflik alir
    bw = bwareaopen(bw,30);  % 30pixelden kucuk olanlar kaldiriliyor.
    bw = imfill(bw,'holes');
    SE =strel('disk', 50);    % birlesik madeni paralarin ayrilmasi saglaniyor.
    bw2 = imerode(bw,SE);
    [L,num] = bwlabel(bw2);  % num ile para adetini ogrendik ve etiket atadik
    stats = regionprops(bw2, 'Area');

    count = 0;
    for n=1:num
        a = stats(n).Area;  % her paranın alanını öğrendik. Boyutlara göre hesaplama yaptık.
        switch logical(true)
            case a> 35000
                 count = count + 1;
            case a >25000  &&  a < 35000
                count = count + 0.5;
            case a >15000 &&  a < 20000
                count = count + 0.25;
            case a > 11000 &&  a < 13000
                count = count + 0.10;
            otherwise
                 count = count + 0.05;
        end
    end

   subplot(1,3,1), imshow(img)
   title(['Toplam para miktari = ',num2str(count),' TL'])
   subplot(1,3,2), imshow(bw)
   subplot(1,3,3), imshow(bw2)

Program çıktımız :

Android-Ekran Dönüşünü Engelleme

| Comments

Android uygulamalarında tasarlanan ekran görünümü, ekranın yatay veya dikey konuma çevrilmesiyle görünümde sorunlara yol açabilir. Ekran dönüşümünü engellemek için screenOrientation özelliğini nosensor olarak ayarlamamız gerekir.

AndroidManifest.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mwe"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.mwe.MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="nosensor"> <!-- BU SATIRDAKİ KOD KULLANILIR -->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
     </application>

</manifest>

Android - Veritabanı Kullanımı

| Comments

Android’e yeni başlayanlar için önemli ve uğraştırıcı olan bir konu veritabanıdır. Android uygulamalarında veritabanı olarak Oracle, Mysql, Sqlite gibi birçok seçenek vardır. Ama kurulum ve konfigürasyon bakımından en kolayı Sqlite olduğu için genellikle Android de bu tercih edilir.

Android de oluşturduğumuz ya da var olan veritabanları /data/data/package_name/databases dizini altında bulunur. Bu dizine erişebilmek için Eclipse ‘de DDMS sekmesinden ya da açık değilse, Window-Show View-File Explorer ‘ı seçmemiz gerekiyor. Daha sonra dizin altından veritabanımıza erişebiliriz. DDMS ‘den sadece veritabanına erişimi sağlayabiliriz. Veritabanı içerisindeki tabloları,yapıları görmek için SQLiteManager kullanabiliriz. SQLiteManager, Firefox eklentisi olarak kullanılır.

Şimdi oluşturduğumuz veritabanını önce push ederek dışarı aktaralım. Databasename.db adındaki dosyamızı push ettikten sonra Firefox’dan SQLiteManager’ı açarak veritabanımızı içeri aktaralım. Burda veritabanında yaptığımız her değişiklik .db dosyamıza kaydedilir. Yaptığımız değişiklikleri uygulamamızın içerisine aktarmak içinde tekrar DDMS sekmesinden dizinimizin altındaki veritabanımıza gelip, önceden dışarı aktardığımız ve üzerinde SQLiteManager ile çalıştığımız veritabanı dosyamızı pull ederek yaparız.

Vagrant - Ansible Playbook

| Comments

Merhabalar,

Vagrant ansible playbook paketlerinin bulunduğu bir depoyu kurmaya çalışırken $ vagrant up kısmında aşağıdaki hata ile karşılaştım.

Hatada anlatılmak istenilen vagrant-ansible geminin kurulmamış olmasıdır. Bu sorunu düzeltmek için ilk önce sistemi update ettim.

Terminal
1
$ sudo apt-get update

Sistemim kendini update ederken /etc/apt/sources.list.d dizini altındaki bazı dosyalar yüzünden birkaç hata ile karşılaşarak güncelleştirmeyi yarıda kesti.

Terminal
1
2
3
4
5
6
7
...

N: Ignoring file 'ferramroberto-java-oneiric.list.save' in directory '/etc/apt/sources.list.d/' as it has an invalid filename extension
N: Ignoring file 'webupd8team-java-oneiric.list.save' in directory '/etc/apt/sources.list.d/' as it has an invalid filename extension
N: Ignoring file 'oneiric-partner.list.save' in directory '/etc/apt/sources.list.d/' as it has an invalid filename extension

...

Bu sorunu halletmek için sources.list.d dizinimiz altındaki hata veren dosyaları silmeliyiz.

Terminal
1
2
3
4
5
$ cd /etc/apt/sources.list.d/

$ sudo rm ferramroberto-java-oneiric.list.save webupd8team-java-oneiric.list.save oneiric-partner.list.save

$ sudo apt-get update

Böylece sistemimiz sorunsuz bir şekilde güncelleştirmesini tamamlamış oldu. Şimdi ansible gem kurulumunu yapalım.

Terminal
1
2
3
4
5
6
7
$ sudo add-apt-repository ppa:rquillo/ansible

$ sudo apt-get update

$ sudo apt-get install ansible -y

$ sudo gem install vagrant-ansible

Ve gemimiz kurulmuş oldu. Şimdi depomuza giderek

Terminal
1
2
3
4
5
$ cd repository

$ vagrant up

$ vagrant ssh

Sanal makinanız sorunsuz bir şekilde çalışmış olmalıdır. Eğer $ vagrant up kısmında

Terminal
1
2
3
4
5
6
...

ImportError: No module named yaml
...

$ sudo apt-get install python-yaml

Sorunumuz halledilir. Kolay gelsin.

Octopress İle Blog Oluşturma

| Comments

Octopress, Jekyll için hazırlanan, Github Pages’in arkasında da kullanılan bir statik blog framework’ü. En popüler engine olarak görülüyor. Octopress rails tabanlı olduğundan kullanımı diğer blog yazılımlarına göre çok farklı. Şimdi adım adım octopress kurulumu ve kullanımına geçelim. Sisteminizde Ruby kurulu olmalıdır.

İlk olarak Octopress deposunu klonlayalım.

Terminal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ git clone git://github.com/imathis/octopress.git octopress

$ cd octopress

$ bundle install
...
...
Your bundle is complete!

$ rake install

## Copying classic theme into ./source and ./sass
mkdir -p source
cp -r .themes/classic/source/. source
mkdir -p sass
cp -r .themes/classic/sass/. sass
mkdir -p source/_posts
mkdir -p public

Blogumuz oluştu. Şimdi blog içerisindeki ayarlamaları yapalım. Bunun için octopress ayarlarının bulunduğu _config.yml dosyasında düzenlemeler yapmamız gerekiyor. Bu dosyadaki kesin düzenlenmesi gereken kısım aşağıdaki gibidir.

_config.yml
1
2
3
4
5
6
url:  			# Blog adresiniz
title:  		# Blog Başlığı
subtitle: 		# Alt Başlık
author: 		# Blogger Adı
simple_search: 		# http://google.com/search
description:		# Blog Hakkında Bilgi

Dosyanın alt taraflarında sosyal ağ bağlantılarınızla ilgili ayarlamalarınızı yapmanız mümkündür.

Şimdi ilk blog yazımızı oluşturalım.

Terminal
1
2
3
$ rake new_post["hello-octopress"]
...
Creating new post: source/_posts/2013-06-23-hello-octopress.markdown

_posts dizinimizin altında dosyamız oluştu. Şimdi dosyayı açıp blogunuzu markdown syntax uygun bir biçimde yazabilirsiniz.

Terminal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ rake generate

...
Building site: source -> public
Successfully generated site: source -> public

$ rake preview

Configuration from /home/betul/octopress/_config.yml
[2013-06-23 23:43:46] INFO  WEBrick 1.3.1
[2013-06-23 23:43:46] INFO  ruby 1.9.2 (2011-07-09) [i686-linux]
[2013-06-23 23:43:46] INFO  WEBrick::HTTPServer#start: pid=4168 port=4000
Auto-regenerating enabled: source -> public
[2013-06-23 23:43:46] regeneration: 94 files changed
>>> Change detected at 23:43:46 to: screen.scss
identical public/stylesheets/screen.css

Dear developers making use of FSSM in your projects,
FSSM is essentially dead at this point. Further development will
be taking place in the new shared guard/listen project. Please
let us know if you need help transitioning! ^_^b
- Travis Tilley

En son kodumuz ile localhost:4000 adresinde bir server açtık. Bu adrese girdiğinizde blogunuzun güncel halini görebilirsiniz.

Blogumuzu oluşturduk şimdi deploy aşamasına geçelim. Ben github üzerinden gidicem fakat octopress sadece github değil heroku,rsync gibi hosting servisleri sağlayan sitelerede deploy edilebilir.

İlk olarak github da create new Github reposity diyerek kendi kullanıcı adımızla oluşturduğumuz yani username.github.io adında bir depo oluşturalım. Daha sonra yerelimizde bulunan octopress dizinine girip terminalde şu kodları yazalım :

Terminal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ rake setup_github_pages

Enter the read/write url for your repository: git@github.com:username/username.github.com.git


Added remote git@github.com:username/username.github.com.git as origin
Set origin as default remote
Master branch renamed to 'source' for committing your blog source files
Initialized empty Git repository in /home/username/source/octopress/_deploy/.git/
[master (root-commit) 2a4e9e7] Octopress init
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 index.html

---
## Now you can deploy to http://username.github.com with `rake deploy` ##

Her yeni blog yazısı oluşturduğumuzda

Terminal
1
2
3
$ rake generate

$ rake deploy

username.github.io adresinizden blogunuzu görebilirsiniz.

Ortaya Çıkabilecek Sorunlar

Yerelime kurulum yaparken bazı sorunlarla karşılaştım. Siz de karşılaşmış olabilirsiniz.

  • İlk olarak depoyu bundle ettiğimde aşağıdaki hatayı aldım.
  • Terminal
    1
    2
    3
    4
    
    ....
    An error occurred while installing rdiscount (2.0.7.3), and Bundler cannot
    continue.
    Make sure that `gem install rdiscount -v '2.0.7.3'` succeeds before bundling.
    

    Bu rdiscount geminin versiyonuyla ilgili bir hatadır. Gemfile içerisinde bu gem’i bulup versiyon kısmını silip tekrar bundle ettiğimizde sorunumuz ortadan kalkar.

  • Diğerini ise blog yazımı oluşturduktan sonra aldım.
  • Terminal
    1
    2
    3
    4
    5
    
    $ rake generate
    ...
    
    Building site: source -> public
    /var/lib/gems/1.9.1/gems/rdiscount-1.6.8/lib/rdiscount.rb:89:in `block in initialize': undefined method `footnotes=' for #<RDiscount:0xac76988 @text="", @autolink=true> (NoMethodError)
    

    Bu hata rdiscount yani markdown syntax’ı için kullanılan bir gem tarafından kaynaklanmaktadır. Markdown için rdiscount dışında maruku,kramdown gibi seçenekleri de kullanabiliriz. Şimdi _config.yml dosyasını açıp markdown kısmındaki rdiscount’u silmeniz gerekir ve yerine maruku yada kromdown dan birini yazın.

    _config.yml
    1
    2
    3
    
    ...
    markdown: kramdown
    pygments: false # default python pygments have been replaced by pygments.rb
    

    Localhost Beyaz Sayfa Hatası

    | Comments

    Bugün yerelimde bir problemle karşılaştım. Yerelimi çalıştırdığımda bomboş beyaz bir sayfa(blank page) önüme geliyordu. Sistemimde WampServer kurulu. İnternette biraz araştırma yaptıktan sonra bu sorunu da hallettim.

    Beyaz sayfa hatasının temel nedeni port çakışmasıdır. Yerelden başka port 80 ‘ni kullanan bir uygulama varsa çakışma yaşanır ve localhost çalışmaz. Bu çakışmayı anlamak için pid ‘leri kontrol etmeliyiz . Öncelikle cmd ‘yi açalım ve şu komutu yazalım.

    Terminal
    1
    
    netstat -aon
    

    Eğer aşağıdaki gibi bir sonuç üretiliyorsa :

    >

  • Görev Yöneticisini açın.
  • Görünüm kısmından “sütun seç ” deyip “pid” işaretleyin.
  • port 80 de çalışan uygulamanın pid ‘sini bulup prosesi sonlandır diyerek işlemi bitirin.
  • Şimdi önemli bir noktaya geldik. Eğer 80 portu pid ‘si 4 olan bir uygulamada çalışıyorsa yani komutun çıktısı aşağıdaki gibiyse :

    Terminal
    1
    
    TCP     0.0.0.0:80     0.0.0.0:0     LISTENING     4
    

    portunuz IIS (Internet Information Services) tarafından kullanılıyor demektir. Bu sorunun çözümü basit.

  • Internet Information Services (IIS) Yöneticisini çalıştırın.
  • Sunucuyu durdurun
  • WampServer’ tekrar çalıştırın yeşil rengini almışsa sorununuz halledilmiş demektir.

    EDIT !!!

    Bilgisayarınızı yeniden başlattığınızda yine aynı sorunla karşılaşıyorsanız aşağıdaki adımları uygulayarak sorunu tamamen ortadan kaldırabilirsiniz. >

  • İlk olarak şunu bilmek gerekir ki IIS prosesi görev yöneticisinden kaldırılmaz. IIS yöneticisine gidip servisi durdurmak ise bize sadece geçici çözüm sunar.
  • Masaüstüne gelip “bilgisayar” sağa tıklayın ve “Yönet” i seçin.
  • Karşınıza gelen ekranda “Hizmetler ve Uygulamar” açın ve “hizmetler” kısmına çift tıklayın.
  • En aşağıdan “Web dağıtım aracı hizmeti” ni seçin . (Web Deployment Agent Service)
  • Servisi durdurun ve tekrar başlamaması için devredışı bırakın. Aşağıdaki gibi bir görüntü oluşturmanız gerekir.
  • >

    Şimdi yerelinizi tekrar çalıştırın. Artık port 80 sadece yereline ait.

    Java Servlet API Problemi

    | Comments

    Gün geçmiyor ki Eclipse’den bir hata almayalım. Bugün Servlet ile ilgili bir hata aldım. Yeni bir proje oluşturduğunuz da yada varolan bir projeyi import ettiğinizde Servlet’ın her bir köşesi size hata veriyorsa aşağıdaki adımları uygulayarak bu problemi çözebilirsiniz. >

    >

    >