28 Eylül 2016 Çarşamba

PYTHON NOTLARI:


Tek satırda if else (python 3.5 if else single line):

kaynak:
http://stackoverflow.com/questions/11529273/python-condense-if-else-to-one-line

tanım:

a if cond else b

Örnek:

a=1
if a==1:
    sonuc= True
else:
   sonuc= False
print(sonuc)

yukardaki kodun eşdeğeri:

a=1
sonuc= True if a==1 else False
print(sonuc)


INTEGER SAYISIYI 8 HANE OLACAK ŞEKİLDE BINARY SAYIYI DÖNÜŞTÜRME:

kaynak:
http://stackoverflow.com/questions/10411085/converting-integer-to-binary-in-python

>>> bin(6)[2:].zfill(8)
'00000110'

örnek: Girilen byte türünden sayıyı 8 haneli olcak şekilde string veriye dönüştürnüz.

python:
---------------
decode_bin fonksiyonu girilen integer sayıyı string türünden 8 hane olacak şekilde başına 0 doldurur:

def decode_bin(int_value):
    return bin(int_value)[2:].zfill(8)

sayi = 5
s = decode_bin(sayi)



çıktısı:
00000101

delphi:
-------------
harici IntToBin adlı fonsiyonu kullanacağız.

function IntToBin(Value: Byte): string;
var
  I: Integer;
begin
  SetLength(Result, 8);
  for I := 1 to 8 do
  begin
    Result[I] := Char(Ord('0') + Value shr 7);
    Inc(Value, Value);
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var sayi:integer;
   s:string;
begin
   sayi:=5;
   s:=IntToBin(sayi);
   edit1.Text:=s;
end;


çıktısı:
00000101

STRINGİ BELLİ BİR KARAKTERE GÖRE PARÇALARA AYIRMA ( split):

Örnek:Ayrıcı karakter  ; olsun."1;argentina;buenos aries" ifadesini ; karakterine göre parçalara ayırınız.

python:
------------------
bunun için split(ayırıcıkarakter) kullanılır.geriye "ayırıcı karakter sayısının bir fazlası kadar" bir liste(dizi) elemanları oluşur.

a = "1;argentina;buenos aires"
b = a.split(';')

b[0] #1
b[1] #argentina
b[2] #buenos aires


delphi:
------------------
Delphi için Split adında harici bir fonksiyon(procedür) kullanıyoruz.

procedure Split(const Delimiter: Char;Input: string;const Strings: TStrings) ;
begin
   Assert(Assigned(Strings)) ;
   Strings.Clear;
   Strings.Delimiter := Delimiter;
   Strings.DelimitedText := Input;
end;

procedure TForm1.Button2Click(Sender: TObject);
var a: string;
   b: TStringList;
begin
   a:= '1;argentina;buenos aires';
   b := TStringList.Create;
   try
     Split(';', a, b) ;
     memo1.Lines.add(b[0]) ;
     memo1.Lines.add(b[1]) ;
     memo1.Lines.add(b[2]) ;
   finally
     b.Free;
   end;
end;



kaynak: http://delphi.about.com/cs/adptips2002/a/bltip1102_5.htm

procedure TForm1.Button1Click(Sender: TObject);
var a: string;
   b: TStringList;
begin
   a:= 'your delphi guide';
   b := TStringList.Create;
   try
     Split(' ', a, b) ;
     memo1.Lines.add(b[0]) ; //your
     memo1.Lines.add(b[1]) ; //delphi
     memo1.Lines.add(b[2]) ; //guide
   finally
     b.Free;
   end;
end;

ancak yukaradaki delphi için tanımlanan split prosedürü tam çalışmıyor.Mesela 'TL - Türk Lirası' stringini doğru paraçalara ayıramıyor,o yüzden yeni split tanımlayalım:


procedure ParseDelimited(const sl : TStrings; const value : string; const delimiter : string) ;
var
   dx : integer;
   ns : string;
   txt : string;
   delta : integer;

begin
   delta := Length(delimiter) ;
   txt := value + delimiter;
   sl.BeginUpdate;
   sl.Clear;
   try
     while Length(txt) > 0 do
     begin
       dx := Pos(delimiter, txt) ;
       ns := Copy(txt,0,dx-1) ;
       sl.Add(ns) ;
       txt := Copy(txt,dx+delta,MaxInt) ;
     end;
   finally
     sl.EndUpdate;
   end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var a:string;
   b: TStringList;
begin
   a:= 'TL - Türk Lirası';
   //ParseDelimited(Memo1.lines,a,'-');
   b := TStringList.Create;
   try
     ParseDelimited(b,a,'-');
   finally
      Memo1.lines.Add(b[0]) ;
      Memo1.lines.Add(b[1]) ;
     b.Free;
   end;

end;

kaynak: https://www.thoughtco.com/parse-a-delimited-string-1057564
RASPERRY PI NOTLARI (RASPIAN yüklü):


putty ile raspberry'e bağlan,komut satırında:

işletim sistemini güncelleme:
sudo apt-get update
sudo apt-get upgrade


program yükleme:
sudo apt-get install <program adı>

python kur:
sudo apt-get install python-dev

mysql kur:
sudo apt-get install mysql-server

vim editör kur:
sudo apt-get install vim

uzaktan erişim programını kur:
sudo apt-get install xrdp

imagin kütüphanesi kur:
sudo apt-get install python-imaging-tk

cihazı web server yapmak için apache kur.browser'dan cihaz ip adresi yazınca web sayfa açılır:
sudo apt-get install apache2

cihaz ayarlarını aç:
sudo apt-get raspi-config

sqlite grafiksel yönetim aracı:
sudo apt-get install sqlitebrowser

python için postgresql  adapter kur:
sudo apt-get install python-psycopg2

postgresql kur:
sudo apt-get install postgresql-9.5

sudo service postgresql start
sudo service postgresql stop
sudo service postgresql restart






27 Eylül 2016 Salı

DICTIONARY / JSON veritipi dönüşümleri:

Dict to JSON:

dict türünden tanımlanan a datasını json türünden b datasına çevirelim:

>>>import json
>>>a = {'name':'ali', 'no':21}
>>>a
{'name':'ali', 'no':21}
>>>type(a)
<class 'dict'>
>>>b = json.dumps(a)
>>>b
'{"name":"ali", "no":21}'
>>>type(b)
<class 'str'>

görüldüğü gibi json datası string yapıda ve içindeki string türünden değişken/veri çiftleri çift tırnak içindedir.Burası önemlidir,aksi halde json.dumps işleminde hata verir.


JSON to Dict:

json türünden tanımlanan a datasını dict türünden b datasına çevirelim:

>>>import json
>>>a = '{"name":"ali", "no":21}'
>>>a
'{"name":"ali", "no":21}'
>>>type(a)
<class 'str'>
>>>b = json.loads(a)
>>>b
{'name':'ali', 'no':21}
>>>type(b)
<class 'dict'>


örnek: {'code':20, 'name':'bob'} dict türünden verinin elemanlarını bulun:


a = {'code':20, 'name':'bob'}
for value in a.items():
    s1=value[0]
    s2=value[1]
    print(s1,s2)

çıktısı:
-------
name bob
code 20


örnek: {'717': [0, 4], '250': [1, 5], '21': [3, 3], '1465': [2, 9], '695': [1, 7], '1202': [1, 1], '187': [1, 1], '280': [1, 1], '9': [8, 8]} dict türünden veriyi elemanlarına ayırınız.

a = {'717': [0, 4], '250': [1, 5], '21': [3, 3], '1465': [2, 9], '695': [1, 7], '1202': [1, 1], '187': [1, 1], '280': [1, 1], '9': [8, 8]}

for key, value in a.items():
    s1=key
    s2=value[0]
    s3=value[1]
    print(s1,s2,s3)


çıktısı:
-------
250 1 5
280 1 1
1465 2 9
9 8 8
695 1 7
187 1 1
1202 1 1
21 3 3
717 0 4



ÖRNEK:Dict türünden bir verinin değerlerini değiştirelim.Bu örnekte değeri "AAA" olan öğeyi güncelleyelim:

root = {"records": [{"key1": "AAA", "key2": "BBB", "key3": "CCC", "key4": "AAA"}]}

dic = root['records'][0]
for i, j in dic.items():    
    if j == 'AAA':
        dic[i] = 'xxx'

print(root)

sonuc:

{'records': [{'key3': 'CCC', 'key4': 'xxx', 'key2': 'BBB', 'key1': 'xxx'}]}


ÖRNEK:Dict türünden bir verinin değerlerini değiştirelim.Bu örnekte "key1" öğesinin değerini güncelleyelim:

root = {"records": [{"key1": "AAA", "key2": "BBB", "key3": "CCC", "key4": "AAA"}]}

dic = root['records'][0]
for i, j in dic.items():    
    if i == 'key1':
        dic[i] = 'a00'

print(root)

sonuc:

{'records': [{'key4': 'AAA', 'key2': 'BBB', 'key3': 'CCC', 'key1': 'a00'}]}


i-->öğe , j--->değer içerir.


ÖRNEK:Birden fazla sözlük öğesi içeren veriyi güncelleyelim:


root = {"records": [{"key1": "A01", "key2": "B01", "key3": "C01", "key4": "D01"},
                    {"key1": "A02", "key2": "B02", "key3": "C02", "key4": "D02"},
                    {"key1": "A03", "key2": "B03", "key3": "C03", "key4": "D03"}]}

for dic in root['records']:
    for i, j in dic.items():
        key3 = dic['key3'] #eğer key3 değerini almak istersek 
        if i == 'key1':
            dic[i] = 'a00'


print(root)

sonuc:

{'records': [{'key4': 'D01', 'key3': 'C01', 'key2': 'B01', 'key1': 'a00'}, {'key4': 'D02', 'key3': 'C02', 'key2': 'B02', 'key1': 'a00'}, {'key4': 'D03', 'key3': 'C03', 'key2': 'B03', 'key1': 'a00'}]}

 


kaynak:
Replacing values in a Python list/dictionary?
http://stackoverflow.com/questions/1076536/replacing-values-in-a-python-list-dictionary

26 Eylül 2016 Pazartesi

YORUM SATIRLARI (kodlar hakkında açıklama yapmak için)
açıklamaDelphiPythonDartCC#
tek satırlı açıklama//#//////
çok satırlı açıklama{ }"""  """"""  """/*  *//*  */


BİTSEL OPERATÖRLER (binary işlemlerde kullanılır):

açıklama Delphi Python Dart C C#
değil not ~ ~ ~ ~
ve and & & & &
veya or | | | |
özel veya xor ^ ^ ^ ^
bit sola kaydır shl << << << <<
bit sağa kaydır shr >> >> >> >>



MANTIKSAL OPERATÖRLER (if ile kullanılıır):

açıklamaDelphiPythonCDartC#
eşit=========
veandand&&&&&&
veyaoror||||||
farklı (eşit değil)<>!=!=!=!=
büyük>>>>>
küçük<<<<<
büyük eşit>=>=>=>=>=
küçük eşit<=<=<=<=<=

MATEMATİKSEL OPERATÖRLER (sayılarda kullanılır ):


açıklamaDelphiPythonDartCC#
toplam+++++
çıkarma-----
çarpma*****
bölme/////
tamsayı bölme div//~/

mod alma (kalan)mod%%%%

python'da divmod fonsiyonu iki tam sayının bölümünden bölüm ve kalanı verir.

>>>a = divmod(10,3)
(3,1)
>>>a[0] #bölüm , 3
>>>a[1] #kalan , 1

22 Eylül 2016 Perşembe

PYTHON string PARÇALAMA:

örnek: "01102016" olan tarihi; gün,ay,yıl şeklinde değişkenlere atayın.

s = "01102016"

gun = s[:2]  #01

ay = s[-4:][2:]  #10

yil = s[-4:]  #2016


örnek: "22/09/2016" olan tarihi; gün,ay,yıl şeklinde değişkenlere atayın.

s = "22/09/2016"

gun = s[:2]  #22

ay = s[-5:][3:]  #09

yil = s[-4:]  #2016



delphi karşılığı:

s := '22/09/2016'

gun := copy(s,1,2)

ay := copy(s,4,2)

yil := copy(s,7,4)



örnek:string değişkeninin ilk ve son karakterlerini al:

s = 'abcdefghklmn'

ilk karakter s[0]  ya da s[:1]

son karakter s[len(s)-1]  ya da  s[-1:] 

21 Eylül 2016 Çarşamba


DJANGO MIGRATIONS :

MIGRATE işleminde hata veriyorsa:
kaynak:

https://micropyramid.com/blog/how-to-create-initial-django-migrations-for-existing-schema/

1-)database içinde django_migrations tablosunun içini sil

delete from django_migrations

2-) proje içindeki migration klasörünü sil

3-)Sırayla aşağıdaki komutları çalıştır ( <app>  uygulama adı) :

python manage.py migrate --fake

python manage.py makemigrations <app>

python manage.py migrate --fake-initial

python manage.py makemigrations

python manage.py migrate



19 Eylül 2016 Pazartesi

JSON FORMATINDAKİ VERİYİ return render İLE TEMPLATE içerisinde django tag kullanarak gösterme:

kaynak:

http://stackoverflow.com/questions/29835017/django-passing-apis-json-to-template-for-use-in-a-table


örnek:Bir json verisini tempalete(html) de <ul> veya <table> i içeride doğrudan nasıl gösterebilirim:
Normalde json çıktısı HttpResponse ile template aktarılır,bu durumda ajax kullanmak zorundasın ve verileri success: fonksiyonu içinde table vb. elemenleri tanımlayarak form üzerinde gösterebiliyorsun.Peki doğrudan {{ obj.id }} django tagı kullanarak nasıl gösterebilirim:

j1.txt içinde json verisi:

{
    "employees":[
    {"firstName":"John", "lastName":"Doe"},
    {"firstName":"Anna", "lastName":"Smith"},
    {"firstName":"Peter","lastName":"Jones"}
]
}

urls.py
------------

url(r'^a2/$',job.views.a2),


job/views.py:
------------------
from django.shortcuts import render
from .forms import ProfileForm
from .models import Profile, Deneme
from web2.settings import BASE_DIR
from django.http import HttpResponse

import urllib
import json

 


def a2(request):
    data_file = BASE_DIR+"/j1.txt"    with open(data_file) as data_file:
        data = json.load(data_file)
    return render(request, 'a1.html',{'objects': data['employees']})


template/a1.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <ul>
    {% for obj in objects %}
        <li>{{ obj.firstName }} - {{ obj.lastName }}</li>
    {% endfor %}
    </ul>
</body>
</html>





<table> içinde göstermek için:

template/a3.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <table border="1px">
        <thead>
            <th>name</th>
            <th>aaa</th>
        </thead>
        {% for obj in objects %}
            <tbody></tbody>
            <tr>
                <td>{{ obj.firstName }} </td>
                <td> {{obj.lastName }} </td>
            </tr>
        </tbody>
    {% endfor %}
    </table>
</body>
</html>





ÖRNEK:

{
    "users": {
        "tim": {
            "username": "tim",
            "first_name": "Tim",
            "last_name": "Tom",
            "id": 2
        },
        "bob": {
            "username": "bob",
            "first_name": "Jim",
            "last_name": "Bob",
            "id": 3
        },
        "bhaskar": {
            "username": "bhaskar",
            "first_name": "Bhaskar",
            "last_name": "Rao",
            "id": 1
        }
    }
}

gibi alt değerler içeren bir json çıktısını nasıl table'de gösterebiliriz?


users.txt içeriği:

{"users":
{"zeki": {"first_name": "zeki", "id": 3, "username": "zeki", "last_name": "sezer"},
"admin": {"first_name": "", "id": 1, "username": "admin", "last_name": ""},
"ali": {"first_name": "ali", "id": 2, "username": "ali", "last_name": "can"}
}
}


urls.py
----------------
url(r'^test/$',job.views.test),


views.py
-------------------------


def test(request):
    data_file = BASE_DIR+"/users.txt"    with open(data_file) as data_file:
        data = json.load(data_file)

    return render(request, 'users.html',{'objects': data['users']})




template/users.html:
-----------------
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Users</title>
</head>
<body>
{{ objects }} <br><br>

 <table border="1px">
        <thead>
            <th>id</th>
            <th>First Name</th>
            <th>Last Name</th>
            <th>Username</th>
        </thead>
        {% for obj in objects.values %}
            <tbody></tbody>
                <tr>
                    <td>{{ obj.id }}</td>
                    <td>{{ obj.first_name }}</td>
                    <td>{{ obj.last_name }}</td>
                    <td>{{ obj.username }}</td>

                </tr>

        </tbody>
    {% endfor %}
    </table>


</body>
</html>


16 Eylül 2016 Cuma

JavaScript Notları:

örnek:Form üzerinde bugünün tarihini gösteren datepicker:

<head>

<link href="http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css" rel="stylesheet" />
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script>
    <script type="text/javascript" src="http://code.jquery.com/ui/1.10.2/jquery-ui.js"></script>
    <script type="text/javascript">
        $(function() {
            $( "#datepicker1" ).datepicker({dateFormat:'dd/mm/yy'}).datepicker("setDate", new Date());
        });
    </script>

</head>


örnek:Form üzerinde iki datepicker olsun,ilkinde bulunduğun ayın başı,ikincisinde ayın sonu olsun:

<head>

<link href="http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css" rel="stylesheet" />
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script>
    <script type="text/javascript" src="http://code.jquery.com/ui/1.10.2/jquery-ui.js"></script>
    <script type="text/javascript">
        $(function() {
            var date = new Date();
            var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);
            var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);

            $( "#datepicker1" ).datepicker({dateFormat:'dd/mm/yy'}).datepicker("setDate", firstDay);
            $( "#datepicker2" ).datepicker({dateFormat:'dd/mm/yy'}).datepicker("setDate", lastDay);
        });
    </script>


</head>

10 Eylül 2016 Cumartesi

İlişkisel tablolarda related_name'in template(html) etkisi:

class Customer(models.Model):  #müşteri    code = models.CharField("Kod", max_length=30, unique = True, blank=True)
    name = models.CharField("Adı", max_length=200)
    address = models.TextField("Adres", blank=True)
    region = models.CharField("İlçe", max_length=100, blank=True)
    city = models.CharField("İl", max_length=100, blank=True)

class Sales(models.Model): 
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE, verbose_name='Müşteri')
    product = models.ForeignKey(Product, on_delete=models.CASCADE, verbose_name='Ürün')
    created_date = models.DateField("Tarih", default=timezone.now)
    quantity = models.IntegerField("Adet", default=1)
    price = models.DecimalField("Fiyat", max_digits=11, decimal_places=2, blank=True, null=True)
    total = models.DecimalField("Tutar", max_digits=11, decimal_places=2, blank=True, null=True)
    user = models.ForeignKey(User, null=True)


Sales modelinde related_name kullanılmazsa template içinde for kullanımı:

{% for sales in customer.sales_set.all %}


Eğer sales related_name kullanılırsa yani

customer = models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='sales', verbose_name='Müşteri')

olursa template içinde for kullanımı:

{% for sales in customer.sales.all %}

5 Eylül 2016 Pazartesi

Form üzerinde tüm text'ler büyük harf olsun:

En pratik çözüm css kullanmaktır:

input[name='elementName'] {
  text-transform: uppercase;
}

css dosyasına bu kodu ekle:

name adlı text'i büyük harf yapar

input[name='name'] {
  text-transform: uppercase;
}


eğer bütün textler büyük harf olsun istenirse:

input {
    text-transform: uppercase;
}



Eğer bazı textler normal, diğerlerinin tamamı büyük harf olsun istenire,mesela kullanıcı ve şifre girişleri normal olsun:

input[name='username'] {
  text-transform: none;
}

input[name='password'] {
  text-transform: none;
}

input {
    text-transform: uppercase;
}


eğer Textarea elementi büyük harf olsun istenirse:

textarea{
 text-transform: uppercase;
}


Önemli not:

"text-transform: uppercase;" durumu Türkçe karakter sorunlarına sebep olabilir.Mesela
i ve İ harflerinde sorun çıkacaktır.Çözüm için,nesneye lang="tr" tagını ekleyin .Örnek:

<input type="text" id="id_customer" name="customer" lang="tr"/> 


Bir input için bunu yapabiliyoruz.Peki django tarafından form.as_p ile oluşturlan formdaki
tüm inputlara bunu nasıl atayabiliriz.Zira

input {
    text-transform: uppercase;
}

içine lang:'tr' yazma şansımız yok.Bu durumda jQuery kullanmak zorundayız.css dosyasına
yukarda yazılanları siliyoruz, her html template dosyasına bu jQuery kodunu ekiyoruz.Böylece
capslock küçük harf durumunda iken i tuşuna basıldığında I değil İ gelmiş olacaktır:

<script type="text/javascript">
String.prototype.turkishToLower = function(){
  var string = this;
  var letters = { "İ": "i", "I": "ı", "Ş": "ş", "Ğ": "ğ", "Ü": "ü", "Ö": "ö", "Ç": "ç" };
  string = string.replace(/(([İIŞĞÜÇÖ]))/g, function(letter){ return letters[letter]; })
  return string.toLowerCase();
}

String.prototype.turkishToUpper = function(){
  var string = this;
  var letters = { "i": "İ", "ş": "Ş", "ğ": "Ğ", "ü": "Ü", "ö": "Ö", "ç": "Ç", "ı": "I" };
  string = string.replace(/(([iışğüçö]))/g, function(letter){ return letters[letter]; })
  return string.toUpperCase();
}

    jQuery(document).ready(function(){
        jQuery('input').keyup(function() {
            this.value = this.value.turkishToUpper();
        });
        jQuery('textarea').keyup(function() {
            this.value = this.value.turkishToUpper();
        });
    });
</script>