chromedp abort request

chromedp ile crawling yaparken actigimiz sayfada bazi dosyalarin indirilmesini engellemek isteyebiliriz. Bu sayede resim, css ve javascript dosyalarinin indirilmesini engelleyerek bandwidth'den kar edebilir, analytics.js gibi dosyalari engelleyerek farkedilirligimizi azaltabiliriz.

chromedp.ListenTarget(*ctx, BlockRequestURLIfMatch(*ctx, "analytics.js$"))
err := chromedp.Run(
    *ctx,
    fetch.Enable(),
    chromedp.Navigate("....")
)


func BlockRequestURLIfMatch(ctx context.Context, pattern string) func(event interface{}) {
    return func(event interface{}) {
        switch ev := event.(type) {
        case *fetch.EventRequestPaused:
            go func() {
                c := chromedp.FromContext(ctx)
                ctx := cdp.WithExecutor(ctx, c.Target)
                re := regexp.MustCompile(pattern)
                if re.FindString(ev.Request.URL) != "" {
                    fetch.FailRequest(ev.RequestID, network.ErrorReasonBlockedByClient).Do(ctx)
                } else {
                    fetch.ContinueRequest(ev.RequestID).Do(ctx)
                }
            }()
        }
    }
}


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"`
}

Later equals never

LeBlanc


Kubernetes

Hangi pod hangi node uzerinde calisiyor
kubectl get pods -o wide
deployment'i degistirmeden podlari restart etmek:
kubectl patch deployment staging-worker -p \
"{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\":\"`date +'%s'`\"}}}}}"

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.