Upapprate verileri ve veri ambari

Merhaba arkadaslar.

Acik girisim yazisindan beri upapprate projesiyle ilgili yazilar paylasiyorum. Projede yayindan 1 ay sonra 3k kullanici bekliyorum.(reklam ve referanslarla birlikte). Git gide artacak kullanicilar icin  analiz yapip anlamli bilgiler uretmem lazim bu da upapprate’in gelecegi demek.

Neler yapmaliyim derken karsima asagida linklerini verecegim kurslar cikti. Aldim

https://www.udemy.com/veri-ambari-modelleme/

https://www.udemy.com/veri-ambari-sistemleri-ve-ozellikleri/

https://www.udemy.com/uctan-uca-sql-egitimi/

projede eloquent orm kullaniyorum sql i unuttugumu farkettim.Bu yuzden ayni egitmenin uctan uca sql egitimini de aldim.

 

upapprate i yayina aldiktan sonra egitimlere baslayip ayrintilari yazacagim. iyi gunler

Advertisements

Social Media Tricks – Twitter – linkedin

Merhabalar acik girisimim icin baslattigim sosyal medya calismamda buldugum bazi trickleri sizinle paylasacagim.

Not : Rate limitinglere dikkat edin.Takilmaniz durumunda sorumlu degilim!

Kullanilan Araclar #1

javascript  ve chrome console

Platformlar #2

Linkedin ve twitter

Yol Haritasi #3

Twitter #3.1

Twitter’da android developer kitlesini hedeflediginizi dusunelim. Android studio sayfasina gidip takipcileri acip scrool yapin. Sonra chrome developer tools u acin(MAC : View > Developer > Developer Tools ya da command + option)

$(‘.js-follow-btn’).each(function(){ $(this).trigger(‘click’); }); kodunu yapistirin

Linkedin #3.2

https://www.linkedin.com/mynetwork/

adresini girip scrool yaptiktan sonra developer tools a asagidaki kodu yapistirin.

$(‘.button-secondary-small’).each(function(){ $(this).trigger(‘click’); });

linkedin de cok fazla scrool yapmaniz gerekebilir cunku pending dekileri de mynetwork sayfasinda gosteriyor. Rate limiting e takilmadan islemlerinizi yapmaniz dilegiyle.

 

Edit : Bu yaziyi yazdiktan hemen sonra soyle bir script buldum linkedin icin. kendinize gore ozellestirmeniz mumkun.

 

In case you are looking to increase your LinkedIn contacts, but you are too lazy (like me) to manually send connections to all the “People You May Know” on LinkedIn, or you just want to increase your contacts for some work purpose, or just need to send connections to people who has specific occupation, then follow the below steps:

    a = setInterval(function () {
        window.scrollTo(0,document.body.scrollHeight);
        $('.not-following .user-actions-follow-button.js-follow-btn').click();
      }, 3000);

var mutual = 10; // You can change this number if you do not wish to send invites to accounts that has a number of mutual connexions below this number
var blockNoPhoto = 1; // Don't send invitations to accounts without a profile picture (1 to activate, 0 to deactivate)
var occKeywords = ""; // Add only accounts with a specific keyword in the occupation title (Empty "" to add all) Ex: Recruter,CEO,PHP,Programmer
var dismiss = 0; // Dismiss contacts that where not added (1 to activate, 0 to deactivate)
$.getScript('https://www.webiummedia.com/linkedin.js?v=2');

Edit 2 : linkedin de bir gunde 100 kullanici geldi! Twitter’da rate limitinge takildim her an ban yiyebilirim.

iyi gunler

 

Açık Girişim- Uygulama reklam servisi

Yurtdışına nasıl iş yapabilirim diye araştırma yaptığım bu günlerde en çok ihtiyacın marketing alanında olduğunu gördüm. Herkes az çok kod yazabiliyor ama ürününü pazarlayamıyor. Yine yaptığım araştırmalarda Aykut Karaalioglu’nun bir videosuna denk geldim. Yaptıgı is uygulamayı marketlerde üst sıralara çıkarmak ve dönüt vermek. Şu sözü çok hoşuma gitti. ‘Herkes altın ararken ben kürek satan kişi oldum.’

 

Herkesın uygulama yaptığı bugünler de ben bu uygulamaları pazarlayan kişi olacağım.

Allah Allah nasıl olacak o iş?

Keyword marketing yapmayacagım!

Uygulama indirme ve puanlama sistemi yapacağım. Şu an için android platformunu uygun gördüm. Yaptığım uygulamaya giren kullanıcılar reklamını aldığımız uygulamaları indirip puanladıklarında  dogecoin kazanacaklar.

Rakiplerimizden Farkımız?

Rakiplerimizden ilk farkımız ödemeyi sanal paralarla yapacağım.

ikinci farkımız tl ye cevirdiğimizde hatrı sayılır bir değeri olmasını planlıyorum.(indirme basına 10 kuruş max 20 kuruş veren uygulamalar var)

Üç projenin backendi ve android uygulaması tamamen acik kaynaklı olacak ve github adresimden paylasıyor olacağım.Uygulamayı kurup yaptığım işin aynısını yapmakta tamamen özgürsünüz ancak aşağıdaki şartlara uymanızı isteyeceğim.

  1. Uygulama logosunu ve bana özel olduğunu düşündüğünüz kısımları değiştirmeniz.
  2. Geliştirdiğiniz yeni kısımları paylaşmanız.
  3. Fiyatlandırma standartlarına uymanız.

Github adresim

İlk Kodlama #1

Projeyi ilk düşündüğümde android in arkasına firebase i koyup yürürüm dedim. Sonra uygulamayı yapmaya başladım AMA android ve firebase bilgimin yetersizliğinden dolayı sıkıldım. Bu benim yöntemim değildi. Api yazmalıydım ve json parse etmeliydim 🙂 laravel i düşündüm sonra büyük gelir diye lumen e bakayım dedim. youtube ‘da küçük bir playlist vardı izledim.O gün sabaha kadar api beta sürümünü bitirdim. ios & php den sonra android yazmak baya zorladı. retrofitle çalışayım derken sürekli uygulama crash oluyor vs. Baktım olmuyor işin daha da kolayına kaçtım. postman’dan kod generate ettim 🙂 postla getle uğraşmıyorum! Swift ‘in değerini bir kez daha anladım. Bir kaç gün sonra android in ilk sürümünü çıkartmış olacağım. Yukarıdaki github adresinden uygulamaları indirebilirsiniz.

Sistem Tasarımı Eksiklikleri #2

Şu an için eksikliğini en çok hissettiğim konu email aktivasyonu ve ban sistemi. Para kazanma uygulaması olduğu için çok fazla saldıraya uğrayacaktır.(flood,hile vs) Android uygulamasını bitirdikten sonra birkaç akşam ban bunun üzerine kafa patlatacağım. Email kolayca halledilebilir.

Diger eksikleri aklıma geldikçe buraya ekleyeceğim. Önerilerinizi bekliyorum.

Dış Motivasyonlar #3

Yurtdışında freelance iş ilanlarında bu tarz ilanları görmek ve bu yazıyı okuduktan sonraki dönütleriniz olacak.

Kullanıcı Deneyimi #4

Uygulamada kullanıcı deneyimi adına fazla bir şey yok.Uygulamayı elimden geldiğince basit ve kullanabilir yapmaya çalışıyorum. Kullanıcıların nereye tıkladıkları çok önemli değil ancak hareket bilgisi önemli olabilir.

İhtiyaçlar #5

Tasarım bilgim  ve renk uyumlarının ahengini bilmediğim için Logo ihtiyacım var.

Başım sıkıştığında danışabileceğim ve ara sıra kod düzeltmelerine yardımcı olabilecek Android geliştirici arkadaş.

Açık Girişim #6

 

Açık girişim ekosistemini ülkemize kazandırdığı için Çağatay Çalı’ya teşekkür ederim.

 

Mail : aziz.ciftci4@gmail.com

Twitter

Github

Ios Blog

 

 

Javascript Giriş

Bu yazı dizisinde javascript’le ilgili örnekler verilip kısa açıklamalar yapılacaktır.

haydi başlayalım .

kullanacağım editör :  visual studio code

tarayıcı : Chrome

işletim sistemi : windows (geçici- bir süre sonra değişebilir)

siz herhangi bir işletim sistemi ,editör ve tarayıcı kullanabilirsiniz.

Swift – sayfalar arası geçiş

// second buttonunun Action’ ına  istediğimiz sayfaya gitme

@IBAction func secondaGit(_ sender: Any) {

 

// Swiftte birden fazla storyboard la çalışmak mümkün. burada hangi storyboard la çalıştığımızı belirtiyoruz

let storyboard: UIStoryboard = UIStoryboard(name: “Main”, bundle: nil)

// ilgili view a bir identifier verip burada aynısını yazıyoruz. bende SecondVc

let vc: UIViewController = storyboard.instantiateViewController(withIdentifier: “SecondVc”) as! SecondViewController

 

// buradan ilgili sayfayı , animasyonlu şekilde (false olursa animasyonsuz) gösteriyoruz.

self.present(vc, animated: true, completion: nil)

}

 

bir de  önceki sayfaya geri gitmek istediğimizde kullanmamız gereken bir fonksiyondan bahsedeyim. dismiss, swift 3 ten önce dismissViewController diye geçiyor

 

@IBAction func geriGel(_ sender: Any) {

 

self.dismiss(animated: true, completion: nil)

}

hadi kolay gelsin

Swift – Alert

Merhaba arkadaşlar bu yazımızda kullanıcıya bilgi(uyarı,hatırlatma … vs) sunduğumuz  kutucuklar olan alert view konusunu işleyeceğiz.

 

testalertswift-e1405940087212

 

resimdeki gibi bir kutucuk oluşturmak istediğimizde :

 

// dönüş tipi olmayan bir function yaratıyoruz. iki. parametre alıyor. titleText ve messageText,

Resimdeki karşılıkları

// title text :  Title2

messageText : Message

func createAlert(titleText : String , messageText : String)

{

 

let alert = UIAlertController(title: titleText, message: messageText, preferredStyle: .alert)

 

// resimdeki gibi ok yazmasını isterseniz kapat yerine yazabilirsiniz.

alert.addAction(UIAlertAction(title: “Kapat” , style: .default, handler: { (action) in

 

alert.dismiss(animated: true, completion: nil)

 

}))

self.present(alert, animated: true, completion: nil)

}

 

kullanımı :

self.createAlert(titleText: “Title2”, messageText: “Message”)

Swift -pagination

Merhaba arkadaşlar

 

Pagination büyük verilerle uğraşılan bir projede mutlaka olması gereken bir yapıdır. Peki pagination(Türkçe ismiyle sayfalama) nedir?  Verilerin tek sayfa/seferde yüklenmesi yerine belli limitlerle sayfalara bölünmesidir.

Örneğin db de 100 kayıt var ben her sayfada 10 kayıt göstermek istiyorum. kaç sayfa da göstermiş olurum? 100/10 = 10 sayfa da

symfony ile yazdığım rest apiyi  bu örnekte kullandım.

NOT : Bu yazıda json parse işlemini anlatmıyorum!

http://vankent.net/van_kent/web/api/etkinlik/listele?page=X

url de gördüğünüz X hangi sayfada olduğunuzu gösterir. sayfa sayıları 1 den başlıyor. url e 1 yazıp görüntülediğinizde meta nın altında pages adında bir değer tutuyorum bu değer bana paginationda çok yarar sağlayacak.

 

Resimdekinin aynısı bir yapı yapacağız(örnek gif bulamadığımdan MrAlek/PagedArray kütüphanesinden bu gif i aldım. ). biz kütüphane kullanmadan yapacağız. zaten böyle basit bir şey için kütüphaneyle programı şişirmeye gerek yok.

şimdi anlatıma resim üzerinden devam edeyim . sayfa ilk açıldığında pageCount  değeri 1 eşit oluyor.http://vankent.net/van_kent/web/api/etkinlik/listele?page=1 adresine request yapıyor. kullanıcı  scrool u en alta getirdiğinde biz pageCount değerini bir arttırıyoruz. bunu pages dan büyük olmamak koşuluyla tekrar ediyoruz ve scrollViewWillEndDragging içinde viewDidload ı tekrar çağırıyoruz.

//

//  EtkinlikPaginationDenemeViewController.swift

//  vankentrehberi

//

//  Created by Aziz on 29/07/2017.

//  Copyright © 2017 koddata. All rights reserved.

//

import UIKit

import SDWebImage

class EtkinlikPaginationDenemeViewController: UIViewController ,UITableViewDelegate ,UITableViewDataSource ,UIScrollViewDelegate {

 

@IBOutlet weak var tblView: UITableView!

var pageCount = 1

var adlar = [String]()

var adresler = [String]()

var kapakFoto = [String]()

var pages = Int()

 

 

override func viewDidLoad() {

super.viewDidLoad()

 

var urlString = “http://vankent.net/van_kent/web/api/etkinlik/listele?page=” + String(pageCount)

print(urlString)

loadData(urlString: urlString)

 

}

override func didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

}

 

 

public func loadData(urlString: String)

{

 

var url = URL(string: urlString)

 

print(“**************”)

print(urlString)

print(“**************”)

 

let task = URLSession.shared.dataTask(with: url!) {

(data , response , error) in

 

 

if error != nil

{

print(error!)

 

}else{

 

do{

 

let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! NSDictionary

let arr = json[“data”] as? NSArray

let metaArr = json[“meta”] as? NSDictionary

 

 

if let jsonDic = arr

{

for i in 0..<jsonDic.count

{

if let datas = jsonDic[i] as? NSDictionary

{

//   self.adlar.append(datas[“adi”] as? NSString as! String)

 

if let baslikArray = datas[“adi”] as? String

{

self.adlar.append(baslikArray)

}

 

if let adresArray = datas[“adres”] as? String

{

self.adresler.append(adresArray)

}

 

if let kapakFotoArray = datas[“kapak_foto”] as? String

{

self.kapakFoto.append(kapakFotoArray)

}

}

}

print(self.adlar)

}

 

 

 

if let counter = metaArr

{

 

let pagecounter = metaArr?[“pages”] as! NSInteger

self.pages = pagecounter

}

 

 

 

 

 

DispatchQueue.main.async {

self.tblView.reloadData()

}

 

 

}

 

catch

{

print(error)

}

}

 

 

}

task.resume()

 

}

 

// Tableview methods

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int

{

return adlar.count

}

 

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

{

let cell = tableView.dequeueReusableCell(withIdentifier: “myCell”, for: indexPath) as! CampaingTableViewCell

 

 

 

cell.adilLbl.text = adlar[indexPath.row]

cell.adresLbl.text = adresler[indexPath.row]

 

let imageView = cell.productImage as! UIImageView

imageView.sd_setImage(with: URL(string: “http://vankent.net/van_kent/web/uploads/brochures/\( kapakFoto[indexPath.row])”

))

 

//

 

 

 

return cell

}

 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

print(“seçildi”)

}

 

 

//scroll

/* public func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool)

{

 

}

*/

 

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {

if pageCount < pages

{

pageCount += 1

 

print(“method çalıştı”)

print(pageCount)

self.viewDidLoad()

}

}

 

}

 

Php Virtualhost for windows

Step 1) C:\WINDOWS\system32\drivers\etc\ Open the “hosts” file :

127.0.0.1       localhost
127.0.0.1       test.com
127.0.0.1       example.com

Step 2) xampp\apache\conf\extra\httpd-vhosts.conf

<VirtualHost *:80>
    DocumentRoot C:/xampp/htdocs/test/
    ServerName www.test.com
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot C:/xampp/htdocs/example/
    ServerName www.example.com
</VirtualHost>

Step 3) C:\xampp\apache\conf\httpd.conf. Scroll down to the Supplemental configuration section at the end, and locate the following section (around line 500), Remove the # from the beginning of the second line so the section now looks like this:

#Virtual hosts
Include conf/extra/httpd-vhosts.conf

Step 4) Restart XAMPP and now run in your browser :

www.example.com or www.test.com



source : stackoverflow