According to Larry Wall, the original author of the Perl programming language, there are three great virtues of a programmer; Laziness, Impatience and Hubris

  • Laziness: The quality that makes you go to great effort to reduce overall energy expenditure. It makes you write labor-saving programs that other people will find useful and document what you wrote so you don't have to answer so many questions about it.
  • Impatience: The anger you feel when the computer is being lazy. This makes you write programs that don't just react to your needs, but actually anticipate them. Or at least pretend to.
  • Hubris: The quality that makes you write (and maintain) programs that other people won't want to say bad things about.

threevirtues.com


Parameters in Go are always passed by value, and a copy of the value being passed is made. If you pass a pointer, then the pointer value will be copied and passed. When a slice is passed, the slice value (which is a small descriptor) will be copied and passed - which will point to the same backing array (which will not be copied).

-Stackoverflow


Go - Slice

Go'da slicelar bir fonksiyona parametre olarak verildiklerinde, orjinal value'yu referans ediyor. Bu sebeple fonksiyon icerisinde slice'in bir elemanini degistirdigimizde orjinal slice da degisir.

package main

import "fmt"

func main() {
    a := []int{1, 2, 3, 4}
    foo(a)

    fmt.Println(a) // [10, 2, 3, 4]
}

func foo(s []int) {
    s[0] = 10
}

Play

Yukarida goruldugu gibi foo fonksiyonuna slice'i pointer olarak vermememe ragmen orjinal slice degisti.

Go Slices: usage and internals


Hobaaa


func m() (i int){
    defer func(){i++}
    return 1
}

m() // 2

pongo2 - disabling template cache

If you use Gin framework and pongo2 template engine together, you should run gin in debug mode for disable template caching.

gin.SetMode(gin.DebugMode)

You no longer have to re-compile app when you make changes in templates.

Happy coding.


Gorm disable auto create/update

Gorm default davranis olarak bir modeli kaydettigimizde otomatik bagli oldugu modeli de kaydeder. Asagidaki gibi association gorm taglerini ekliyerek bunu engelleyebiliyoruz. Ben hem create, hem update'de bu ozelligi kapatmayi tercih ediyorum.

type Booking struct {
    AccountID     int
    Account       Account ` gorm:"foreignkey:AccountID;association_autoupdate:false;association_autocreate:false"`
}

Flutter - birkac not

build icinde API request yapmak yerine initState icerisinde yapmak daha iyi, bu sayede alt screenlere gittikce olusan ekstre API hitten kurtuluyoruz(alt screenlere gittigimizde ust screen change oldugu icin build tetikleniyor).

Fakat initState icerisinde API'a istek yaparken bir hata meydana gelirse; loading ekranda kaliyor. Bunun onune gecip hata ekrani gosterebilmek icin screen'e bir async func yazip onun vasitasiyla API call yapip hata olursada setState ile hata oldugunu set edip ona gorede hata ekranini gosteriyoruz.

  • Async requestin exceptinida async oluyormus: bak
  • initState icerisinde context degiskenine ulasilabiliyor.
  • Her parametre alan statefull widget'da parametreyi stateless widget a ordanda statefull widgetina gecirmeye gerek yokmus. statefull widget icinde widget diyerek onun stateless widget'ina ulasilabiliyor. Bak. initState icerisinde de context'e erisebiliyoruz. Bunun sebebi context ve widget birer getter, bu yuzden screen icerisinde herhangi biryerden ulasilabiliyorlar.

Flutter yapisi

Layoutlar

Karisik

State

Bloglar

Sohbet - Chat

  • https://gitter.im/flutter/flutter

Hatalar ve cozumleri

Tools

Hosuma giden tasarimlar

Nasil yapilir

Animasyonlar

Dart hakkinda

  • Learn Dart Before You Flutter
  • Generic methods
  • Dart'ta dosyanin icinde bir class veya degisken _ ile basliyorsa private oluyor, fakat ayni dosya(library) icerisindeki farkli class'lar bu private objelere erisebiliyor. Sadece baska dosyadan erisim saglandiginda erisilemiyor. Private olan bir class'a private attribute eklemeye gerek yok cunku zaten kendisi private. Ama public classlara private atribute eklenebilir.

Python iç içe defaultdict

nested_dict = lambda: collections.defaultdict(nested_dict)

d = nested_dict()
d[1][2][3] = ‘Hello!’
print(d[1][2][3]) # Prints Hello!

Sublime Text de Dosya/Dizinleri Hariç Tutma

Sublime text de dosya arama(Ctrl+Shift+P) ve Hızlı gezinti(Ctrl+P) de cıkmasını istemediğiniz dizinleri proje ayarlarında folder_exclude_patterns'a, dosyaları file_exclude_patterns'a eklemek gerekiyor.

{
  "folders":
    [
      {
        "path": "/home/mesuutt/projects/myapp",
        "folder_exclude_patterns": ["app/staticfiles"],
        "file_exclude_patterns": ["*.css"]
      }

    ]
}