mervesaglam

What is Lean Business Analysis?

Lean Business Analysis is focused on increasing efficiency by making incremental improvements to software and capturing customer feedback early and often. This minimizes waste in the product development cycle. Lean Business Analysis prioritizes experimentation over elaborate planning, and celebrates continuous, incremental improvement. It eliminates much of the bureaucracy that accompanied traditional Business Analysis.*

Overview :

Question 1 : Why do we need to make incremental improvements and get customer feedback early?

It can easily explained by the famous image below. We will see that we are on the right track if we regularly develop and test the small parts and requirements of the project and get customer feedback at every step.

Question 2 : Why do we need to minimize waste in the product development cycle?

The answer will be the cost of the project. The most important goal is to fulfill the necessary needs and demands that the customer will use when the project is completed.

In fact, this is one of the foundations of the Lean approach. After Henry Ford switched to the Lean Manufacturing system in 1913 to increase mass production, Eiji Toyoda took this systematic one step further in the 1950s and contributed to its current state. Among its basic principles is the article “An approach that eliminates unnecessary resource consumption (does not add value to the organization) in production and other processes”.

Question 3: Why we should prioritize experimentation over detailed planning?

The answer will be time. Applying Agile and Lean thinking along with detailed requirements discovery, analysis, and acceptance testing to your software development process will help the IT requirements definition process evolve rapidly.

In the analysis processes, faster progress is supported with small comprehensive user stories that bring together small and meaningful pieces instead of comprehensive user stories that produce meaningful outputs as a result of long researches and plans.

Question 4: Why do we need to eliminate much of the bureaucracy that accompanied traditional Business Analysis?

In an ever-changing world, we can find the answer in accepting that requirements are constantly changing. For example, advancing the waterfall method, which is one of the traditional business analysis models, may cause the following problems;

· Misunderstanding of the requirement

· Incorrect analysis of the requirement

· Change of requirement over time

However, with the Lean analysis approach, it is possible to detect and prevent many of these problems at an early stage.

Question 5: How Does It Work?

· Have a team that can organize its own work and is open to communication.

· One of the other most important things is to set a minimum viable product (MVP) and a PBL clearly clarifies user stories and acceptance criteria.

· Apply Lean Thinking is one of the most important foundations. Thus, by applying the Lean approach, we prevent too much time loss that may arise in the above question and answer content.

· Get feedback. Conducting continuous testing and receiving feedback from the Product owner and customers will help us understand that we are on the right track.

Conclusion:

In a rapidly changing world, we must also change our traditional approaches.

We can use the lean analysis approach for any applicable requirement, without forgetting that time and cost are the most important determinants due to the nature of every business.

In this method, which we are generally loyal to, we can create analysis models suitable for us and perform needs analysis faster with methods such as 5n1k. All the issues questioned above are to understand the need correctly, to minimize unnecessary costs and to produce useful outputs.

Analysis is key as it is one of the early stages of development processes. We should not forget that it is always important to move forward with correct and understandable lean analyzes without forgetting that a wrong analysis leads to a wrong development, a wrong test, and as a result turns into an unacceptable business requirement.

References:

· businessanalysisexperts.com :An Overview of Lean / Agile Business Analysis

Author: Pınar Candan

Son yıllarda yazılım dünyasındaki otomasyon trendleri, geliştirme süreçlerini hızlandırma ve hatasızlaştırma noktasında önemli adımlar atmamıza olanak sağladı. Çeviri işlemlerini otomatize ederek, küresel ölçekte çalışan projelerde büyük kolaylıklar elde etmek mümkün.

Yazılım geliştirme süreçlerinde, bir ürünün farklı coğrafyalardaki kullanıcılarına hitap edebilmesi, dil opsiyonlarını başarıyla barındırabilmesine bağlıdır. Bu önemli konu, genellikle iki farklı yaklaşımı içerir. Birincisi, ücretli yazılımların kullanılması ve ikincisi ise sıfırdan farklı katmanlardan oluşan yeni yazılım modülleri oluşturarak bu süreci yönetmektir. Bu iki yaklaşım da kendi avantajlarına sahip olsa da, her ikisi de ciddi bir emek ve maliyet gerektirmektedir.

Bu makalede, Google Spreadsheet üzerinde tuttuğumuz çevirileri Node.js ile okuyarak projemize uygun bir maliyetle entegre edeceğiz.

  1. Google Dokumanlar adresine gidiyoruz ve yeni bir Google E-Tablo oluşturuyoruz.
  2. Oluşturduğumuz tablonun başlığını ve sheet name’ini değiştiriyoruz.
  3. Ardından A1 kolonuna key B1 kolonuna valueC1 kolonuna da language değerlerini giriyoruz ki, tablomuz anlaşılabilir olsun.
  4. İçerisine birkaç tane key ekliyoruz. Obje olarak eklemek istediğimiz keyleri arasına . (nokta) koyarak ekliyoruz.
Translation keys in google spreadsheet
Translation keys in google spreadsheet
  1. Sağ üst köşedeki Paylaş buttonuna basıyoruz.
  2. Genel Erişim alanının altındaki Kısıtlanmış alanına tıklıyoruz.
  3. Bağlantıya sahip olan herkes olarak işaretliyoruz.

Uyarı: Sağ tarafta bulunan rolün Görüntüleyen olduğundan emin olun.

Geliştirme bölümüne gecebiliriz.

Environment variable’larımızı okuyabilmek için projemizde dotenv paketinin kurulu olmasi gerekli. Eğer kurulu değilse

npm i dotenv -save-dev

komutunu çalıştırarak projemize dahil ediyoruz.

Sonrasında Google Spreadsheet dosyamız ile ilgili değerleri .env dosyamızın içerisine ekliyoruz.

# .env
GOOGLE_SHEET_ID=1zJf8zo3HrCx1vIaddi8FrIRrVMkMqZRMzUGQTVcj-bE # Google Spreadsheet URL'inizdeki orta bölüm.
GOOGLE_SHEET_NAME=Web_App_Translations # Spreadsheet'deki sheet name'iniz
GOOGLE_RANGE=A:C # Okuma yapılacak kolon aralığı
GOOGLE_API_KEY=XYZ # Google console'dan aldığınız API keyiniz.

Spreadsheet API ile ilgili daha fazla bilgi için Google Spreadsheet API

⚠️ Önemli Uyarı: Google API key’inin açık olarak .env dosyasında paylaşılması potansiyel güvenlik riskleri oluşturabilir. Bu key’i yalnızca geliştirme ortamında saklamanız ve dışarıya açık bir şekilde paylaşmamanız büyük önem taşımaktadır.

Sonrasında translation dosyalarımızı okuyacak JavaScript dosyamızı oluşturuyoruz ve kodlarımızı ekliyoruz.

// ./scripts/fetch-translations.js

// Gerekli 3rd party kütüphaneleri ekliyoruz.
const fs = require("fs").promises;
const path = require("path");

require("dotenv").config();

// Çevirilerimizi çekmek için kullanacağımız URL'i oluşturuyoruz.
const REQUEST_URL = `https://sheets.googleapis.com/v4/spreadsheets/${process.env.GOOGLE_SHEET_ID}/values/${process.env.GOOGLE_SHEET_NAME}!${process.env.GOOGLE_RANGE}?key=${process.env.GOOGLE_API_KEY}`;

// Yanlış yazım veya geliştirme durumundaki çevirileri de dahil etmemek adına destek verdiğimiz dilleri tanımlıyoruz.
const SUPPORTED_LANGUAGES = ["tr", "en", "de"];

// Verileri çeken Promise fonksiyonumuzu tanımlıyoruz.
// Node v21 ile fetch fonksiyonu globalde stable olarak kullanılabiliyor. Kullanamadığınız durumlarda https://www.npmjs.com/package/node-fetch paketini indirip, kullanabilirsiniz.
const fetchData = async () => {
try {
const response = await fetch(REQUEST_URL);
if (!response.ok) {
throw new Error(`HTTP Error. Status: ${response.status}`);
}
return await response.json();
} catch (error) {
throw error;
}
};

// Çevirileri kaydedeceğimiz konumu döndüren fonksiyonu yazıyoruz.
const getTranslationPath = (language) =>
path.resolve(__dirname, `../public/assets/i18n/${language}.json`);

// Çeviriyi dil adında kaydeden fonksiyonu yazıyoruz.
async function saveTranslationFile(translations, language) {
await fs.writeFile(
getTranslationPath(language),
JSON.stringify(translations, null, 2)
);
}

// Çevirilerimizi çeken fonksiyonumuzu yazıyoruz.
async function fetchTranslations() {
try {
const data = await fetchData();
const rows = data.values;
// Başlık bölümlerini siliyoruz.
rows.splice(0, 1);

// Desteklediğimiz dilleri çevirilerimizin doldurulacağı objenin içerisine ekliyoruz.
const initialTranslations = SUPPORTED_LANGUAGES.reduce(
(acc, language) => ({ ...acc, [language]: {} }),
{}
);

if (rows.length) {
// Çeviriler dil kontrolünden geçerek listeye ekleniyor.
const translations = rows.reduce((acc, translationRow) => {
const [key, value, language] = translationRow;

if (!SUPPORTED_LANGUAGES.includes(language)) {
console.log(
`Unsupported language: ${language}. Skipping "${key} : ${value}" translation.`
);
return;
}

acc[language][key] = value;
return acc;
}, initialTranslations);

// Desteklenen her dil için ilgili çevirileri kaydediyor.
await Promise.all(
SUPPORTED_LANGUAGES.map(async (language) => {
await saveTranslationFile(translations[language], language);
console.log(`${language}.json saved successfully.`);
})
);
} else {
console.info("No data in the table.");
}
} catch (error) {
console.error("An error has occurred. Details: ", error);
}
}

fetchTranslations();

Translation dosyalarımızın kayıt olacağı klasörü oluşturuyoruz.

mkdir -p ./public/assets/i18n

Translation’larımızı kolayca okuyabilmek için package.json dosyamiza script olarak da ekliyoruz.

{
//...
"scripts": {
//...
"translation": "node ./scripts/fetch-translations.js"
//...
}
//...
}

Terminalde translation komudunu çalıştırıyoruz.

npm run translation

Çalıştırdıktan sonra ./public/assets/i18n dizininde tr.jsonen.json ve de de.json dosyalarımızı görüyoruz.

Author: Berk Baskı

Başarının anahtarı, etkili takım çalışması ve paydaşlar arası güçlü iş birliği yeteneği ile yakından ilişkilidir. Günümüz dinamik iş dünyasında, bireysel olarak özgün fikirlere sahip olmanın ötesinde, farklı bakış açılarına sahip insanların bir araya gelerek takım çalışması ile projelerin başarı elde etmesi önemli bir unsurdur. Sürdürülebilir başarı için bir diğer unsur ise paydaşlar arası iş birliğidir. Proje sürecinde dış paydaşları anlamak, paydaşların projeden beklentilerini karşılamak ve değer yaratmak iş birliğinin uzun vadeli olması için temel unsurlardır.

Takım Çalışması:

Farklı Yeteneklerin Birleşimi: Takım çalışması, farklı yetenek ve uzmanlığa sahip insanları bir araya getirir. Bu çeşitlilik, farklı perspektiflerden gelen bilgi ve becerilerin birleştirilerek daha yaratıcı, inovatif ve etkili çözümler üretilmesini sağlar.

Karar Verme Sürecini Geliştirme: Takım çalışması, proje süreci için daha iyi kararlar alınmasına yardımcı olur, daha kapsamlı bir şekilde düşünmeyi sağlar ve daha iyi kararlar verilmesine olanak tanır.

İş Verimliliği: Takım çalışması, iş verimliliğini artırır. İyi bir ekip, iş yükünü daha etkili bir şekilde paylaşır ve işleri daha hızlı tamamlar.

Hata Düzeltme ve Öğrenme: Takımlar, hataların hızlı bir şekilde tespit edilmesine ve düzeltilmesine yardımcı olur. Aynı zamanda, hatalardan öğrenilen durumlara bağlı olarak potansiyel hatalar önceden farkedilebilir.

Problem Çözme: Karmaşık sorunlar genellikle birden fazla perspektif ve uzmanlık gerektirir. Takım çalışması, bu tür sorunları daha hızlı ve etkili bir şekilde çözme olanağı sunar.

Açık ve Etkili İletişim: Takım çalışması, açık ve etkili iletişimi teşvik eder. Güçlü iletişim, takım üyeleri arasındaki anlayışı artırır ve çatışmaların çözümüne yardımcı olur. İletişim becerileri gelişmiş bir ekip, daha hızlı ve verimli bir şekilde çalışabilir. Ekip içi açık iletişim kurularak geri bildirim almak ve vermek, gelişim için kritik öneme sahiptir.

Motivasyon ve İş Memnuniyeti: Bir takımın başarısı, bireyler arasındaki güçlü bağlılık ve motivasyonla doğrudan ilişkilidir. Takım üyeleri birbirlerini desteklediğinde, işleri üzerinde daha fazla sorumluluk hissederler. Takım çalışması, bireylerin motivasyonunu artırır. Bir ekip üyesi olarak birlikte çalışma deneyimi, çalışanların kendilerini işlerine daha bağlı hissetmelerine ve daha büyük bir amacın bir parçası olduklarını görmelerine yardımcı olur. Bu da iş memnuniyetini artırır.

Paydaşlar Arası İş Birliği:

Daha İyi Kararlar Almak İçin Birlikte Çalışma: Alanında uzmanlaşmış paydaşların görüşleri ile dış perspektifleri iç süreçlere dahil etmek proje süreçleri için daha kapsamlı ve bilinçli kararlar alınmasına katkıda bulunur. Paydaşlarla ortak hedefler belirlemek ve paydaşların beklentilerini anlamak, iş birliğini teşvik eder.

Bilgi ve Kaynak Paylaşımı: Paydaşlar arası iş birliği, bilgi, deneyim ve kaynakların paylaşılmasını sağlar. Bu, bir projenin daha verimli bilgi ve kaynağa erişimini sağlayarak daha başarılı olmasına yardımcı olur.

Kriz ve Risk Yönetiminde Esneklik: Paydaşlar arası iş birliği, kriz anlarında ve riskli durumlarda projenin dayanıklılığını artırır. Paydaşlarla iyi bir ilişki, kriz anlarında daha sağlıklı bir iletişim ve kriz yönetimi sağlar. Bu da krizin etkilerini hafifletebilir ve sürecin daha hızlı toparlanmasına yardımcı olabilir. Paydaşlar arasında riskleri paylaşmak ve yönetmek, beklenmedik sorunların üstesinden gelmeyi daha kolay hale getirebilmeye ve risklerin azaltılmasına yardımcı olur.

Güçlü İlişkiler: Paydaşlar ile güçlü ilişkiler kurmak, güveni artırır, iş birliği fırsatlarını çoğaltır. Kısa ve uzun vadede projenin başarısını ve marka değerini artırır. Gelecekteki iş birliği fırsatları için olumlu bir itibar oluşturur.

İnovasyon ve Büyüme: Farklı bakış açıları ve deneyimlere sahip kişilerin bir araya gelmesi, yaratıcılığı teşvik eder ve inovasyona katkı sağlar. Farklı düşüncelerin çatışması, yeni fikirlerin ve çözümlerin ortaya çıkmasına sebep olur. Paydaşlar arası iş birliği, yeni fırsatlar ve büyüme potansiyeli yaratılmasına olanak tanır.

Sonuç olarak, iyi bir takım çalışması ve paydaşlar arası iş birliği, iş süreçlerinin daha verimli ve etkili bir şekilde yönetilmesine katkıda bulunur. Bu da genel performansı artırarak bir projenin gelişmesini ve üstün başarı elde etmesini sağlar. Hem içsel uyum hem de dışsal ilişkileri içeren bu iki kavram organizasyonlar için kilit bir öneme sahiptir ve sektörde rekabet avantajı sağlar. Unutmayalım “biz” olmak bizi geleceğe taşır!

Author: Seda Uğursal

2000’li yılların başından beri kullanılan ve Pandemi ile birlikte Dünya’daki popülerliği hızla artan BNPL, son yıllarda Türkiye’de de adını sıklıkla duyduğumuz bir ödeme yöntemi haline geldi.

Şimdi Al Sonra Öde anlamına gelen Buy Now Pay Later (BNPL) terimi isminden de anlaşılacağı gibi yapılan bir alışverişin ertelenerek yahut taksitlendirilerek daha sonra ödenmesine yönelik bir hizmet. Bu yazımızda, müşteri davranışları üzerinden BNPL hizmetinin tüketiciler için cazibesini inceliyor olacağız.

Alışık olduğumuz ödeme yöntemlerinin başında kredi kartları ve ihtiyaç kredi yer alıyor. BNPL ise varlığını Bankalardan ayrışan Finansman Şirketleri ile devam ettiriyor. Basitçe açıklamak gerekirse alışveriş kredisine karşılık gelen bu ödeme yöntemini kullanan şirketler, müşterilerine kredi kartı deneyimi yaşatıyor. Peki insanlar neden ihtiyaç kredisi çekmek veya kredi kartı ile ödeme yapmak yerine BNPL ile ödeme yapmayı tercih ediyor?

2022 Ağustos ayında Ipsos tarafından gerçekleştirilen Antikriz Raporu’ndan derlenen verilere göre Türkiye’de her 10 kişiden 7’sinin kullandığı bir kredi kartı var (1). Kredi kartları, yapılan alışverişler karşılığında sundukları para yerine geçen puanlar ve çeşitli markalarla yaptıkları iş birlikleriyle çekiciliğini korusa da düzenli olarak alışveriş yapmayan tüketiciler için yüklü bir alışveriş tutarı karşısında yetersiz kalıyor.

BNPL imkânı sunan finansman şirketleri; beyaz eşya, mobilya, sezonluk giyim alışverişleri gibi tek seferlik ve yüklü tutarlardaki alışverişler için Kredi Kartı limitini kalıcı olarak arttırmak istemeyen tüketiciler için makul fırsatlar sunuyor. Kısıtlı zaman ve belirli mesai saatlerinde çalışan tüketiciler, İhtiyaç Kredisi için Banka başvurularıyla uğraşmak yerine bu tip şirketlerin mobil uygulamalarına kimlik bilgileriyle giriş yaparak tamı tamına alışveriş tutarları kadar kredi çekebiliyor ve bunu çeşitli vade sayılarıyla taksitlendirebiliyor veya ödemeyi erteleyebiliyor. Kulağa çekici geliyor değil mi?

Bunun yanında, kredi ödemelerini sahip oldukları herhangi bir kredi kartıyla yaparak finansman şirketinin sunduğu erteleme seçeneklerine 1 ay daha ekleyebiliyorlar. Bu seçenek yalnızca yüklü alışverişlerde değil, önceliklendirilmesi gereken daha mütevazi tutarlar için de BNPL teklifini cazip hale getiriyor. Kredi kartında limit kalmaması durumunda BNPL yöntemi ile sonraki aya ertelenen alışveriş, bir sonraki ayın ekstresine dahil edilebiliyor.

Bu yöntem, acil durumlar ve yüklü tutarlardaki alışverişler dışında dönemsel harcamaları yıla yaymak için de sıklıkla kullanılabiliyor. Kış aylarında artan doğal gaz faturaları, tatil alışverişleri veya okul masrafları gibi dönemsel harcamalarını taksitlendiren tüketiciler, her ay ödeme yaparak yıllık bütçelerini daha dengeli bir şekilde kullanabiliyor.

BNPL teklifinden yararlanmanın diğer avantajı ise bu şirketlerin müşterilerine fiziksel bir kart oluşturmadığı ve para giriş çıkışına izin veren cari bir hesap sunmadığı için kredi kullanılırken kabul edilen teklif dışında herhangi bir ödeme veya kesinti olmayacağı garantisi. Giyim, teknoloji, beyaz eşya, enerji ve diğer pek çok sektörde yaygın olarak kullanılan BNPL teklifini sunan finansman şirketleri de Bankalar gibi BDDK (Bankacılık Düzenleme ve Denetleme Kurulu) tarafından düzenleme ve denetlemeye tabi. Bu da şirketlerin güvenilirliğini arttırıyor ve müşterilerine yasal olarak haklarının korunduğunun garantisini veriyor.

Taksit ve erteleme seçenekleri her ne kadar cazip olsa da ödemelerin birikmesi veya gecikmesi durumunda tüketicilerin ödeme güçlüğü yaşaması mümkün. Bu yüzden BNPL tekliflerinin de tıpkı kredi kartları ve ihtiyaç kredileri gibi dikkatli kullanılması gerekiyor.

Tüm bunlar göz önünde bulundurulduğunda BNPL teklifi sunan şirketlerin Türkiye’deki yükselişi hızla devam edecek gibi duruyor. Elbette bu sektörde müşteriye sunulan kullanım ve ödeme kolaylığı, tercihi büyük oranda etkiliyor. Bu durum da teknolojik altyapıyı sektöre yeni girecek ve varlığını koruyan şirketler için rekabetin en önemli unsuru haline getiriyor. Her geçen gün artan teknolojik olanaklar ve müşteri deneyimini geliştiren yöntemlerle Innovance, bu alandaki sektör liderlerine sunduğu hizmetle kanıtlanmış bir tecrübe ortaya koymakta.

Siz de popülerliği hızla artan BNPL pazarında yerinizi almak istiyorsanız ve bu yolculukta size eşlik edecek bir çözüm ortağına ihtiyacınız varsa Innovance yanınızda.


Kaynak: https://fintechistanbul.org/2022/09/12/arastirma-turkiyede-her-10-kisiden-7sinin-kredi-karti-var/

Author: Ekinsel Akça

Publishing the app to the stores sometimes is very exhausting because of the review duration, and sometimes the reviewer declines that version due to various causes. Besides this sometimes we make small mistakes or want small changes. And who wants to go through that process again and again every time? CodePush solves that problem entirely. Once you implement CodePush, you can update your app anytime, provided you don’t change the native codes.

Sounds good right? Let’s learn how you implement CodePush.

“Live out of your imagination, not your history.” — Stephen Covey

What is CodePush?

CodePush, a service provided by Microsoft’s App Center, allows developers to push updates to React Native apps directly to users’ devices without going through the App Store or Google Play Store. This article will delve into the usage of CodePush in React Native, exploring its benefits, implementation, and best practices.

The Benefits of Using CodePush

  1. Seamless Updates: CodePush enables you to deliver updates instantly, eliminating the need for users to wait for app store approvals and downloads. This means quicker bug fixes and feature rollouts, resulting in a more satisfying user experience.
  2. Reduce Release Cycle: CodePush allows you to skip the lengthy release cycle required by app stores. You can push updates as frequently as needed, making addressing issues promptly and maintaining a cutting-edge app easier.
  3. A/B Testing: Implement A/B testing by pushing updates to a subset of users, enabling you to gather feedback and assess the performance of new features before a full-scale release.
  4. Optimized Rollouts: Gradually roll out updates to users in stages, ensuring that any unforeseen issues can be addressed before impacting the entire user base.

To start using CodePush in your React Native project, follow these steps:

First, you need to install CodePush to project:

yarn add react-native-code-push

After that, you need to set up the project in Microsoft’s app center.

## CODEPUSH
IOS_CODE_PUSH_KEY=KEY_IOS
ANDROID_CODE_PUSH_KEY=KEY_ANDROID

Now, you need to set up OS’s

iOS;

  1. Run cd ios && pod install && cd .. to install all the necessary CocoaPods dependencies.​
  2. Open up the AppDelegate.m file, and add an import statement for the CodePush headers:
#import <CodePush/CodePush.h>

3. Find the following line of code, which sets the source URL for bridge for production releases:

- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge

4. Replace the method with this:

- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#else
return [CodePush bundleURL];
#endif
}

5. Add the Deployment key to Info.plist:


<key>CodePushDeploymentKey</key>
<string>$(IOS_CODE_PUSH_KEY)</string>

ANDROID;

  1. In your android/settings.gradle file, make the following additions at the end of the file:
...
include ':app', ':react-native-code-push'
project(':react-native-code-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-code-push/android/app')

2. In your android/app/build.gradle file, add the codepush.gradle file as an additional build task definition to the end of the file:

...
apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"
...

3. Update the MainApplication.java file to use CodePush via the following changes:

...
// 1. Import the plugin class.
import com.microsoft.codepush.react.CodePush;

public class MainApplication extends Application implements ReactApplication {

private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
...

// 2. Override the getJSBundleFile method in order to let
// the CodePush runtime determine where to get the JS
// bundle location from on each app start
@Override
protected String getJSBundleFile() {
return CodePush.getJSBundleFile();
}
};
}

4. Add the Deployment key build.gradle;

def codePushKey = safeExtGet("ANDROID_CODE_PUSH_KEY")

or

Add the Deployment key to Strings.xml

 <resources>
<string name="app_name">AppName</string>
<string moduleConfig="true" name="CodePushDeploymentKey">DeploymentKey</string>
</resources>

Setups are complete. Now you need a screen to show the user download status.

  1. Create a functional component

Get props for showing the status of CodePush and progress to the user. You’ll get these with a hook from the second step.

const CodePushLoading: FC<CodePushLoadingProps> = ({
header = 'Downloading',
subHeader = 'general_codePush_codePush_text',
progress = '0%',
}) => {
return (
<View>
<Text label={header} variant={'title3'} />
<Space size={12} />
<Text label={subHeader} variant={'body6'} />
<Space size={24} />
<ActivityIndicator color={colors.darkGrey} size="large" />
<Space size={24} />
<Text label={progress} variant={'body4'} />
</View>
);
};

export default CodePushLoading;

2. Create a hook to control CodePush

In this hook you’ll return two parameters; message and progress. You can see them below;

For the message you’ll control SyncStatus to show the user current status

import { useEffect, useState } from 'react';

import SplashScreen from 'react-native-bootsplash';
import codePush, { DownloadProgress } from 'react-native-code-push';

interface UseCodePushReturn {
syncMessage?: string;
progress?: string;
}

const useCodePush = (isLoading: boolean): UseCodePushReturn => {
const [syncMessage, setSyncMessage] = useState<string>();
const [progress, setProgress] = useState<string>();

const syncStatusChangedCallback = (syncStatus: codePush.SyncStatus) => {
switch (syncStatus) {
case codePush.SyncStatus.CHECKING_FOR_UPDATE:
setSyncMessage('Checking for update...');
break;
case codePush.SyncStatus.DOWNLOADING_PACKAGE:
setSyncMessage('Downloading update...');
break;
case codePush.SyncStatus.AWAITING_USER_ACTION:
setSyncMessage('User waiting...');
break;
case codePush.SyncStatus.INSTALLING_UPDATE:
setSyncMessage('Loading update...');
break;
case codePush.SyncStatus.UP_TO_DATE:
setSyncMessage('The app is up to date...');
break;
case codePush.SyncStatus.UPDATE_IGNORED:
setSyncMessage('Update canceled by user...');
break;
case codePush.SyncStatus.UPDATE_INSTALLED:
setSyncMessage('Update installed, Application restarting...');
break;
case codePush.SyncStatus.UNKNOWN_ERROR:
setSyncMessage('An error occurred during the update...');
break;
default:
setSyncMessage(undefined);
break;
}
};

const downloadProgressCallback = ({ receivedBytes, totalBytes }: DownloadProgress) => {
const currentProgress = Math.round((receivedBytes / totalBytes) * 100);
setProgress(`${currentProgress} %`);
};

useEffect(() => {
if (!isLoading) {
SplashScreen.hide({ fade: true, duration: 360 });
if (!__DEV__) {
codePush.notifyAppReady();
codePush.checkForUpdate().then(update => {
if (update) {
codePush.sync(
{ installMode: codePush.InstallMode.IMMEDIATE },
syncStatusChangedCallback,
downloadProgressCallback,
);
}
});
}
}
}, [isLoading]);

return {
syncMessage,
progress,
};
};

export default useCodePush;

3. After that you need to call in the main file of the application. App.ts

First, call the hook you just wrote.


const { progress, syncMessage } = useCodePush(isLocalizationLoading || isAppUpdateLoading);

then call “CodePushLoading.tsx” conditionally;

progress || syncMessage ? (
<CodePushLoading progress={progress} subHeader={syncMessage} />
) : (
//Example
<Navigation />
)

That’s it. You just completed to setup of CodePush.

Now let’s learn how to send updates to CodePush;

In the left panel of the app center, click “CodePush ” link under the “Distribute”

Create the app. At the right top “Staging” is selected. If you want to change to “Production” as you need.

After all your changes run following script in the terminal.

appcenter codepush release-react -a mahir/testIos -d Production -m

That’s it. Your js bundle is sent to the app center cloud. And will serve users immediately because you use “-m” flag, that’s means mandatory. Users will download updates on the next launch.

P.S. The versions are crucial. If they are not matched with the “Target Version” users can’t see downloads

Next Steps…

What is the Best Practices Of CodePush

  1. Test Thoroughly: Even though CodePush simplifies the update process, thorough testing is essential. Always test updates in a staging environment to catch potential issues before they reach your users.
  2. Keep CodePush Keys Secure: Your App Center API key should be kept secure to prevent unauthorized updates. Do not hardcode it in your app; instead, use environment variables or a secure storage solution.
  3. Versioning: Maintain a clear versioning strategy for your updates to ensure that users receive the correct releases.
  4. Communicate with Users: Notify users when updates are available and explain the benefits of updating to encourage them to do so.

Conclusion

In today’s fast-paced development world, ensuring that our applications are up-to-date without causing disruption to our users is paramount. CodePush provides an invaluable tool for React Native developersto achieve this goal. Through its seamless integration and ability to deliver updates on-the-fly, it streamlines the app updating process, providing a smoother experience for both developers and users alike. As we’ve explored in this guide, implementing CodePush is straightforward, and the benefits it offers in terms of flexibility and responsiveness are undeniable. Whether you’re a seasoned developer or just starting out with React Native, consider integrating CodePush into your workflow. The convenience it brings could revolutionize how you deliver updates and maintain your application. Remember in the realm of mobile applications, user experience is king — and a tool that can enhance that experience is worth its weight in gold.

Author: Mahir Uslu

Photo: Final match of the 1575 tournament in El Escorial. Painting by Luigi Mussini.

Nedir bu Gens Una Sumus? — FIDE’nin (Fédération Internationale des Échecs) -Dünya Satranç Federasyonu- satranç için kullandığı, basit görünen ama altında derin anlamlar taşıyan bir mottosudur. Türkçe tercümesi ise ‘’Biz bir aileyiz’’

Çünkü satranç ortak paydasında buluşanlar bilirler ki dil,din,ırk fark etmeksizin hepimizin konuştuğu sessiz bir dil, ortak bir paylaşım enstrümanıdır satranç.

22 sene önce orta okulda matematik öğretmenimin önerisi ile tanıştığım satranç, normal hayatımda olduğu kadar iş hayatımda da birçok durumda eşsiz bir usta, bir danışman, bir yaşam koçu, bir guru olarak desteğini üzerimde hissettiriyor.

O zamanlar satranç tahtasındaki siyah ve beyaz karelerin büyüsüne kapılan küçük ben aslında zamanla dualitenin hayatımızdaki yerini ve önemini öğrenmeye başlamıştım. Ama şimdilik bunu başka bir yazının konusu yapalım ve gelin bu benzersiz oyununun kurumsal hayatımıza nasıl eşlik edebileceğini konuşalım.

Bildiğiniz üzere iş dünyası, sürekli değişen dinamikleri, rekabeti ve karmaşıklığı ile bilinir. Her geçen gün ise bu durum daha karmaşık ve rekabetçi bir hal almaktadır. Bu zorlu ortamda, iş hayatindaki profesyoneller herhangi bir avantajı kullanmak için önlerine çıkan tüm fırsatları değerlendirerek ellerinden geleni yapmaya çalışırlar. Ancak, bu avantajlar çoğunlukla beklenmedik yerlerde ve zamanlarda gelir. İşte tam da bu noktada, satranç oyununun iş hayatında bizlere sağladığı derin ve kapsamlı avantajları inceleyelim istiyorum.

Çünkü Satranç, sadece eğlenceli bir masa oyunu değil, aynı zamanda iş dünyasına farklı perspektifler sunan bir liderlik ve bilgelik okuludur.

Peki bu okulun müfredatında neler var?

1. Takım Ruhu

Satranç oyununda her taşın kendine ait bir görevi ve önemi vardır. Ancak tüm taşlar, tekil varlıklar olsalar da aslında bir bütünü oluştururlar. Bir vezir, Şah’ın hayatta kalması için diğer taşlara göre üstün gözükebilir ancak yeri gelir bir piyonun pozisyonu veya hamlesi ile oyun kazanılabilir. İş hayatında da daha çok bireysellikten öte takım ruhu ile hareket edenler kazanmaktadır. Birlik ve beraberlik duygusu projelerimizde bizi başarılı kılan en temel unsurdur.

2. Hatalardan Ders Çıkarma

Satranç, retrospektif deneyimlerimizden yola çıkarak bir sonraki oyunda aynı hataları yapmamızı engelleyen bir öğretmendir. İş hayatında da, zaman zaman yaptığımız hatalardan dersler alarak bu hataların tekrarlanmamasına yönelik gerekli tüm aksiyonları almak önemlidir. Satranç bu noktada oldukça usta bir öğreticidir.

3. Strateji ve Planlama Yetenekleri

Satranç, oyunculara karmaşık stratejiler oluşturma ve uzun vadeli planlama yetenekleri kazandırmakta yardımcı olur. Her hamle düşünülerek atılır, her seçenek özenle değerlendirilir. İş dünyasında da aynı titizlikle strateji oluşturmak ve uzun vadeli hedeflere ulaşmak kritik bir rol oynar. Satranç, bu becerileri geliştirmemize büyük katkıda bulunur.

4. Risk Yönetimi ve Özgüven

Satranç, oyuncuların riskleri öngörmelerini ve yönetmelerini gerektirir. Her hamle bir risk taşır ve bu riskleri dikkatle değerlendirmek, özgüven gerektirir. Bazen bir oyunda isteyerek kaybedilen önemli bir taş aslında oyunu kazanmamıza sebep olurken karşımızdaki oyuncuda hayranlık uyandıran bir hamle olarak yer eder. İş dünyasında da riskleri yönetmek ve kararlarımızın arkasında durmak önemlidir. Satranç, bu tip sanatsal hamlelerle özgüvenimizi artırarak bu alanda daha başarılı olmamıza yardımcı olur.

5. Karar Verme Yeteneği

Satranç, oyunculara hızlı ve mantıklı kararlar almanın önemini gösteren bir bilge gibidir. Her hamle, oyunun sonucunu etkileyebilir ve bu nedenle kararlar dikkatle düşünülerek alınmalıdır. İş dünyasında da hızlı kararlar almak, rekabet avantajı sağlama açısından oldukça önem taşır. Satranç, bu yeteneğimizi geliştirmemize yardımcı olur.

6. Problem Çözme ve Analitik Düşünme

Satranç, oyuncuların karmaşık sorunları çözme ve analitik düşünme yeteneklerini geliştirmelerine yardımcı olur. Rakip stratejilerini çözmek, hamleler arasındaki neden-sonuç ilişkilerini anlamak ve en iyi çözümleri bulmak için analitik zeka gerekir. Günümüz iş dünyasında da aynı beceriler, karmaşık sorunları çözmek ve verilere dayalı kararlar almak için hayati önem taşır. Satranç, bu açıdan mükemmel bir okuldur.

7. Konsantrasyon ve Sabır

Satranç, derin bir konsantrasyon ve sabır gerektirir. Bir oyun saatlerce sürebilir ve her hamle düşünülerek atılmalıdır. Aynı zamanda, beklenmedik durumların üstesinden gelmek ve sonucu beklemek, sabır ve disiplin gerektirir. İş dünyasında da konsantrasyonu sürdürmek ve uzun vadeli projeler üzerinde çalışmak sabır ve disiplin gerektirir. Satranç, bu anlamda gelişmemize katkı sağlayan bir sanat eseridir.

8. Liderlik ve İşbirliği Yetenekleri

Satranç, takım oyunları veya turnuvalar sırasında işbirliği ve liderlik becerilerimizi geliştirmemize olanak tanır. Oyuncular, stratejilerini diğerleriyle paylaşarak veya bir ekip olarak hareket ederek kazanma hedefini paylaşırlar. İş dünyasında da başarılı olmak için liderlik ve işbirliği yetenekleri kritik öneme sahiptir.

9. Kişisel Gelişim ve Zihinsel Sağlık

Satranç oynamak kişisel gelişimi teşvik eder ve zihinsel sağlığı iyileştirir. Bu oyun, zihinsel keskinliği artırır, öğrenmeye olan açıklığı artırır ve problem çözme yeteneklerini geliştirir. İş dünyasında bu tür bir kişisel gelişim, kariyerlerimizde ilerlerken önemli bir rol oynar.

10. Zaman Yönetimi

Satranç, sınırlı zaman içinde hızlı kararlar almayı gerektirir. İş dünyasında da hızlı kararlar almak ve zamanı etkili bir şekilde yönetmek önemlidir. Satranç, bu konuda en geliştirici öğretmenlerden bir tanesi olarak sahne almaktadır.

Honoré Daumier (1863), The Chess Players

11. Uzun Vadeli Hedef Belirleme

Satranç, oyunculara uzun vadeli hedefler belirleme ve bu hedeflere nasıl ulaşacaklarını planlama becerisi kazandırır. İş dünyasında, uzun vadeli planlama ve hedef belirleme, başarıya giden yolu aydınlatan en önemli kaynaklardan biridir.

12. Empati ve Rakip Analizi

Satranç, oyuncuların rakip düşünce süreçlerini analiz etmeyi ve empati yapmayı öğretir. İş dünyasında da empati ve rakip analizi, rekabet avantajı sağlayarak bir adım önde olmamızı sağlar.

13. İnovasyon ve Yaratıcılık

Satranç, oyunculara yeni ve yaratıcı stratejiler geliştirme fırsatı sunar. Her bir oyun yeni bir ders kitabı gibidir. İş dünyasında da inovasyon ve yaratıcılık, rekabetçi bir avantaj sağlayarak rakiplerimizin önüne geçmemizi sağlar.

14. Değişime Uyum ve Esneklik

Satranç, beklenmedik durumlarla başa çıkmayı öğretir ve oyuncuları hızla değişen koşullara adapte olmaya teşvik eder. İş dünyasında değişime uyum ve esneklik bu zorlu hayatta kalabilmek için büyük önem taşır.

15. Disiplin ve Sistemli Düşünme

Satranç, oyunculara disiplinli ve sistemli düşünme alışkanlığı kazandırır. Her hamle düşünülerek atılmalı, kurallara uygun hareket edilmelidir. İş dünyasında da bu tür disiplin ve düzenli çalışma alışkanlıkları oldukça değerlidir.

16. Dikkat ve Odaklanma Yetenekleri

Satranç, dikkat ve odaklanma becerilerini artırır. Oyuncular, her hamleyi incelemek ve rakibin stratejilerini izlemek için yüksek konsantrasyona sahip olmalıdır. İş hayatında da işimizi iyi ve başarılı yapmak için dikkatli olmak bize avantaj sağlar.

17. Mücadeleci Ruh ve Azim

Satranç, oyunculara mücadeleci bir ruh ve azim duygusunu kazandırır. Satranç oyuncuları her zorluğa karşı direnmeyi öğrenirler. Bu kişisel özellikler de bizi iş hayatında öne geçiren önemli unsurlardandır.

Dönüp baktığınızda aslında satrancın bir oyundan daha fazlası olduğunu fark ettiniz değil mi?

Satranç, iş hayatında stratejik bir üstünlüğü temsil eder ve bu avantajı değerlendirenler için sınırsız fırsatlar sunar. Bu oyun, profesyonellerin iş dünyasında liderlik rollerini üstlenmeleri, problem çözmeleri, stratejik düşünmeleri, karar verme, problem çözme, konsantrasyon, sabır, işbirliği, risk yönetimi, özgüven, kişisel gelişim, zihinsel sağlık, zaman yönetimi, hedef belirleme, empati ve rakip analizi gibi temel iş becerilerini geliştirmek için kullanılabilecekleri güçlü bir araçtır. Her bir hamle, iş dünyasında başarı için büyük bir rol oynayabilir ve satranç oynamak, her açıdan gelişmemizi ve iş dünyasındaki performansımızı artırmamızı sağlar.

Başarılı bir iş kariyeri için, strateji tahtasındaki hamlelerinizin önemini asla küçümsemeyin.

Author: Ozan Çınarlı

Introduction

Retail serve as a financial solution who require funds for personal needs, differing from the financial aids provided to corporate companies. These loans are broadly categorized into two types: Cash Loans and Shopping Loans.

Cash Loans

Cash loans assist individuals in times of immediate financial need by depositing money directly into their bank accounts. This money can be utilized for various purposes immediately after issuance. However, it is essential to note that legal requirements in the banking sector can frequently change. For instance, the Banking Inspection Board (BDDK) recently mandated that all banks restrict customers from purchasing cryptocurrencies, stakes, and foreign currencies using cash loans. Subsequently, customers must now sign a commitment letter agreeing to these terms before obtaining a cash loan.

Interest Rates & Conditions

Interest rates on cash loans may vary depending on individual financial statuses and the accuracy and timeliness of their bill payments. Maintaining a high banking score, achieved by timely payments of credit installments, card debts, and utility bills, can facilitate better interest rates. Moreover, rates can differ based on the issuance channel; some banks’ mobile applications might offer more favorable rates compared to their call centers.

Shopping Loans

Shopping loans, on the other hand, are designated for purchasing products through online shopping platforms or physical stores, with the funds transferred directly to the store’s account by the bank. It’s crucial to note that these loans cannot be used as cash. Many modern online platforms and stores have integrated with bank credit systems, offering two primary integration methods:

With API integration, companies can design their screens by integrating web services provided by the bank, giving them the flexibility to choose the information or data displayed to the customer. However, this method does require companies to understand and implement credit business logic on their platforms, necessitating dedicated business analyst resources.

Web view integration enables companies to incorporate end-to-end solutions from banks. Upon choosing payment with credit, customers are directed to the bank’s integrated screens to complete the loan process within the web view. Once successfully completed, the bank notifies the company that the loan has been issued, allowing customers to proceed with their purchases.

Conclusion

Retail loans, whether in the form of cash or shopping loans, have evolved to cater to the varied needs of individuals, offering convenience and flexibility. However, it is imperative for individuals to understand the terms, conditions, and legal implications associated with them to make informed decisions.

Remember, the ever-evolving banking laws require customers and companies to stay informed about the latest amendments and adjustments in financial regulations to avoid unforeseen complications.

Author: Deniz Kurt

Agile çalışmanın esas amacı projeyi anlamlı en küçük parçalara bölerek sürekli ve kullanılabilir çıktılar üretmektir. Ancak günümüzde bazen bu yaklaşım, sürekli değişen taleplere uyum sağlama ihtiyacı olarak algılanabilir. Böyle bir durum, netleşmeyen isteklerin döngüsüne yol açabilir. Ayrıca, var olan isteklere ek olarak yeni isteklerin gelmesi de sıkça karşılaşılan bir durumdur.

İş Analistinin Rolü

Bir iş analistinin temel görevleri arasında projelerin takibini yapmak ve istekleri netleştirmek bulunmaktadır. Projeyi başarılı bir şekilde takip edebilmek için:

· Projenin detaylı planı, paydaşları ve efor çalışmaları hakkında bilgi edinmek gerekir.

· Eğer bu bilgiler daha önce oluşturulmuşsa, bu detayları talep etmek önemlidir.

· Proje başlangıcında gerçekleştirilen kick-off toplantısında proje planı üzerinden detaylı bir şekilde geçilmeli ve tüm proje paydaşları ile tanışılmalıdır.

Etkin İletişim ve Proje Takibi

Projede karşılaşılabilecek olası düzensizlikleri önlemek için:

· Takımın topluca iletişime geçebileceği kanallar üzerinden gruplar oluşturulmalıdır.

· Agile ritüellere uyulmalıdır.

· İşler proje planına göre önceliklendirilmeli ve her süreç eforlara göre takip edilmelidir.

· Yaşanan olumsuzluklar, plana etki ediyorsa zamanında gündeme getirilmeli, bu konudaki bilgiler paylaşılmalı ve çözüm yolları tüm ekiple paylaşılmalıdır.

Planlama ve Takip

Proje planının etkin bir şekilde yürütülmesi, hem geliştirme sürecinin sağlıklı ilerlemesini hem de çıktının kalitesini doğrudan etkiler. Bu nedenle:

· Proje planı her zaman güncel ve erişilebilir olmalıdır.

· Plan, süreçteki olumsuzluklar veya yeni gelen talepler doğrultusunda güncellenmeli, tüm ekiple paylaşılmalı ve müşteri/iş biriminin onayı alınmalıdır.

· Her yeni talep için gereken eforlar belirlenerek plana eklenmelidir.

Sonuç

Proje geliştirme, takım işidir. Bir takımda müşteri ve iş birimi de vardır ve bu takımın en güçlü dayanağı güvendir. Etkin, güncel ve şeffaf bir proje planı, bu güvenin temel taşlarından biridir. Etkin planlama, takım oyununun merkezine yerleştirilmelidir.

Author: Zehra Saygı

Projelerimizde bazı durumlarda uzun ya da içinde birden fazla yazı stili bulunan metinler eklememiz gerekebilir. Eğer eklenecek bu metin statik bir yapıdaysa tek tek biçimlendirmeler yapılarak istediğimiz görüntüde bir sayfayı oluşturabiliriz. Fakat bu metnin servisten bize gelmesi ya da tek tek biçimlendirmemizin pek mümkün olmadığı durumlarda başka çözümler kullanmamız gerekmekte.

Örnek vermemiz gerekirse;

kampanya detaylarını içeren bir ekranınız bulunuyor ve içindeki tüm bilgileri servisten alıyorsunuz. Bu ekranda kampanyanın kullanım koşullarında maddeler halinde uzunca bir yazı bulunuyor ve bazı maddelerin içinde bulunan linkler aracılığı ile bir sözleşme metnine yada websitesine kullanıcıyı yönlendirmeniz gerekiyor. Peki bunu nasıl yapabilirsiniz?

  1. Belirli kurallarla metni mapleyerek link bulunan maddelere bir onPress özelliği ekleyebilirsiniz. Fakat metni maplemek için bir kural seti oluşturmak çok mümkün olmayabilir ya da gelen metinlerde belirli bir standart olmayabilir. Bu da kodun doğru çalışmasını uzun vadede etkileyebilir.
  2. Metin bir PDF olarak eklenebilir, bu sayede ön yüzde herhangi bir tasarım değişikliği yapmanız gerekmez ve PDF içindeki linkleri açabilirsiniz. Tabi PDF doğru şekilde oluşturulduysa.
  3. Bir diğer yöntem olarak metni HTML olarak alabilirsiniz. Servisten aldığınız HTML’i WebView olarak açarak ya da direkt render edebilmenizi sağlayan bir kütüphane yardımı ile ilgili sayfaya ekleyerek pratik bir şekilde istenilen görüntüyü oluşturabilirsiniz. Fakat burada büyük bir sorun bulunmakta. Yaptığınız projede kampanyaları ekleyen ekip HTML bilmiyor olabilir, HTML bilse de bu formatta düzenlemek ve kontrol etmek karışık ve zor olabilir.
  4. Bir diğer ve bu yazıda anlatılacak olan yöntem ise Markdown kullanmak.

Peki Markdown Nedir?

Markdown, John Gruber tarafından oluşturulan, basit ve okunabilir bir işaretleme dilidir (markup language). HTML bilgisi gerektirmeden metin biçimlendirmesine olanak tanır.

Neden Markdown?

Çünkü sunduğu basit syntax ile herhangi bir editör kullanmadan dahi pratik bir şekilde metinlerinizi düzenleyip, bunları kullanıcılara hızlı bir biçimde gösterebilmenize olanak sağlıyor.

React Native ile Markdown Nasıl Kullanılır?

React Native projelerinizde Markdown kullanabilmek için projenize ekleyebileceğiniz birden fazla kütüphane bulunmakta. Fakat hem TypeScript desteği bulundurması hem detaylı bir dökümana sahip olması hem de aktif olarak yüksek bir kullanıma sahip olmasından dolayı, daha güncel kütüphaneler bulunsa da bu rehberde react-native-markdown-display kütüphanesini kullanacağız.

İlk olarak projemize kütüphaneyi eklemek ile başlayalım.

yarn add react-native-markdown-display

Kütüphane projeye eklendikten sonra kullanmak istediğiniz sayfaya import ederek hızlı bir biçimde kullanmaya başlayabilirsiniz.

Örnek:

import React from 'react';
import { SafeAreaView, ScrollView } from 'react-native';
import Markdown from 'react-native-markdown-display';

function App(): JSX.Element {
const exampleMarkdown = `
# Heading1 <h1>
## Heading 2 <h2>
### Heading 3 <h3>
#### Heading 4 <h4>
##### Heading 5 <h5>
###### Heading 6 <h6>

**Bold <strong>**
*Italic <em>*
***Bold and Italic <em><strong>***

>Block Quotes
>>Nested Block Quotes

1. Ordered List
1. Ordered List
2. Ordered List
2. Ordered List
2. Ordered List

- Unordered List
- Unordered List
- Unordered List
- Unordered List
- Unordered List

[Innovance](https://innovance.com.tr/) *Link with title*
<https://innovance.com.tr/> *Direct Link*

\`\`\`
Code Area
\`\`\`
`;

return (
<SafeAreaView>
<ScrollView contentInsetAdjustmentBehavior="automatic">
<Markdown>{exampleMarkdown}</Markdown>
</ScrollView>
</SafeAreaView>
);
}
export default App;

Markdown Display – 1 – Snack

snack.expo.dev

Projemize bu şekilde Markdown formatında metin eklemiş olduk. Bundan sonra tek yapmamız gereken bu metinleri tasarımımıza göre özelleştirmek. Peki bunu nasıl yapabiliriz? Kullandığımız kütüphane bunu yapmak için bize iki yöntem sunmakta.

Yöntem 1: style Propunu Kullanarak Özelleştirme: Markdown komponentinin style propunu kullanarak Markdown ögelerinin stillerini özelleştirebilirsiniz.

Örnek:

<Markdown
style={{
heading1: {color: 'red'},
link: {textDecorationLine: 'none', color: 'blue'},
ordered_list: {color: 'purple', fontSize: 24},
em: {textDecorationLine: 'underline', fontStyle: 'normal'},
}}>
{exampleMarkdown}
</Markdown>

Markdown Display – 2 – Snack

snack.expo.dev

Yöntem 2: rules Propunu Kullanarak Özelleştirme: Markdown komponentinin rules propunu kullanarak kendi özel render kurallarımızı tanımlayarak Markdown öğelerinin görünümünü özelleştirebiliriz.

Örnek:

import React from  'react';
import {
ImageBackground,
SafeAreaView,
ScrollView,
Text,
View,
} from 'react-native';
import Markdown, {RenderRules} from 'react-native-markdown-display';

const Background = require('./assets/Color1.jpg');

const App = () => {
const exampleMarkdown: any = `
### Heading 3 <h3>
>Block Quotes
Paragraph
`;

const renderRules: RenderRules = {
heading3: (node, children) => (
<View key={node.key} style={{backgroundColor: 'purple'}}>
<Text style={{color: 'white', fontStyle: 'italic', fontWeight: '900'}}>
{children}
</Text>
</View>
),
blockquote: (node, children, _parent, styles) => (
<View
key={node.key}
style={{
...styles._VIEW_SAFE_blockquote,
borderColor: '#5C9C5C',
marginTop: 16,
height: 162,
width: 300,
}}>
<ImageBackground
source={Background}
resizeMode="contain"
style={{width: '100%', height: '100%'}}>
<Text style={{color: 'white'}}>{children}</Text>
</ImageBackground>
</View>
),
paragraph: (node, children) => (
<Text
key={node.key}
style={{
textAlign: node.type === 'blockquote' ? 'left' : 'center',
marginVertical: 16,
}}>
{children}
</Text>
),
};

return (
<SafeAreaView>
<ScrollView contentInsetAdjustmentBehavior="automatic">
<Markdown rules={renderRules}>{exampleMarkdown}</Markdown>
</ScrollView>
</SafeAreaView>
);
}
export default App;

Markdown Display – 3 – Snack

snack.expo.dev

Bu şekilde projenize Markdown formatında metinler ekleyebilir, tasarımlarını özelleştirebilirsiniz.

Yararlı Linkler:

  1. React Native Markdown Display
  2. Markdown Syntax
  3. Online Markdown Editor

Author: Umutcan Gözegü

Öncelikle Agile projelerde metodoloji seçimi, proje kapsamı ve gereksinimleri, takım yapısı, iş akışı özellikleri gibi birçok faktörü göz önünde bulundurarak yapılması gereken bir iştir. Scrum ve Kanban, Agile projelerde en çok tercih edilen iki yaklaşım türüdür. Her iki yaklaşım da çevik ve esnek çalışma şekillerini vurgular, ancak farklı kurallar ve süreçler içerir. Hem Kanban hem de Scrum metodolojilerinde Scrum Master, ekibe rehberlik ederek süreçlerin etkili bir şekilde uygulanmasında ve geliştirilmesinde önemli bir rol üstlenir.

Scrum Metodolojisi

Belirli zaman aralıklarında tekrarlayan “Sprint” adı verilen dönemler boyunca çalışmayı vurgular. Bu dönemlerde, önceden belirlenmiş sürelerde hedeflenen iş miktarı tamamlanmaya çalışılır. Scrum’da, bir Product Owner ve bir Scrum Master rolü bulunur. İşler Backlog’dan seçilir ve Sprint boyunca çalışılır. Scrum, karmaşıklığı yönetmek ve tahmin edilebilir sonuçlar elde etmek amacıyla uygundur.

Scrum Metodolojisi

Scrum’ın Tercih Edilmesi Gereken Durumları:

Kanban Metodolojisi

İş akışının görsel olarak izlendiği ve işlerin sınırlı WIP (Work in Progress) limitlerine tabi olduğu bir metodolojidir. Kanban, esnek bir yaklaşım sunar ve daha organik bir şekilde işlerin akmasını sağlar. Kanban tahtası, iş parçacıklarının farklı aşamalarda nasıl ilerlediğini gösterir. Kanban’ın ana amacı, iş akışını optimize etmek ve aşırı yüklemeyi önlemektir.

Kanban Metodolojisi

Kanban’ın Tercih Edilmesi Gereken Durumlar:

Scrum ve Kanban Arasındaki Farklar Nelerdir?

  1. Süreç Yapısı:

2. Roller:

3. İş Önceliklendirme:

4. Süreç İzleme:

5. WIP Limitleri:

Kümülatif Akış Diyagramı ile WIP Limitleri

6. Süreç Değişiklikleri:

Projeye uygun bir metodoloji seçmek, ekibin daha verimli çalışmasını ve projenin başarılı bir şekilde yönetilmesini sağlayabilir. Ancak uygun bir metodoloji seçilmediğinde yeni kurulan ekiplerde birliğin sağlanması ve iletişim kanallarının oluşturulması oldukça güç hale gelebilir. Bu tarz durumlarda başta üst yönetimin desteği doğrultusunda proje yöneticisine ve scrum master’a çok iş düşmektedir. Engellerin aşılması ve projenin sürekliliğinin sağlanması konusunda gerekli aksiyonların yetkili kişiler tarafından alınması gerekmektedir.

Yeni Kurulan Bir Ekiplerde Scrum Master Olarak Karşılaşabileceğiniz Zorluklar ve Üstesinden Gelmek İçin Kullanılabilecek Teknikler

Yeni kurulan bir ekibin Scrum Master’ı olarak, özellikle başlangıç aşamasında bazı zorluklarla karşılaşmanız mümkündür. Bu zorluklarla başa çıkmak ve ekibinizi etkili bir şekilde yönlendirmek için kullanabileceğimiz bazı teknikler aşağıda detaylandırılmıştır:

Zorluk:

Çözüm:

Zorluk:

Çözüm:

Zorluk:

Çözüm:

Zorluk:

Çözüm:

Zorluk:

Çözüm:

Yeni kurulan bir ekibin Scrum Master’ı olarak, ekip üyelerinin ihtiyaçlarına odaklanarak, iletişimi güçlendirerek, süreçleri optimize ederek ve motivasyonu yüksek tutarak zorlukların üstesinden gelebilirsiniz. Bu durum, ekip üyeleri arasında bir güven ve iş birliği kültürü oluşturmanıza yardımcı olacaktır.

Scrum Metodolojisi Altında Scrum Master’ın Önemi

  1. Süreç ve Uygulama Yönetimi: Scrum Master, ekip üyelerine Scrum prensiplerini ve süreçlerini anlamalarında yardımcı olur. Daily, Sprint Planlama, Sprint Review ve Sprint Retrospektif gibi toplantıların düzenlenmesi ve etkili bir şekilde yürütülmesini içerir.
  2. Engellerin Giderilmesi: Scrum Master, ekip üyelerinin işlerini sürdürmelerini engelleyen her türlü sorunu tespit eder ve çözmeye çalışır. Engelleri kaldırmak, ekip üyelerinin verimli bir şekilde çalışmalarını sağlamak için önemlidir.
  3. Ekip İletişimi ve İş birliği: Scrum Master, ekip üyeleri arasındaki iletişimi teşvik eder ve iş birliğini kolaylaştırır. Böylelikle daha iyi fikir alışverişinin, bilgi paylaşımının ve ekip içi uyumun sağlanmasına katkıda bulunur.
  4. Performans İyileştirmesi: Scrum Master, ekip üyelerinin performansını izler ve gerektiğinde iyileştirme fırsatları tanımlar. Ekip üyelerinin yeteneklerini geliştirmelerine ve daha iyi sonuçlar elde etmelerine yardımcı olur.
  5. Ekip Öğrenmesi: Scrum Master, Sprint Retrospektif toplantıları aracılığıyla ekip içi öğrenmeyi teşvik eder. Ekip, her Sprint sonrasında süreçleri gözden geçirir ve daha iyi hale getirmek için ne tür değişiklikler yapabileceklerini belirler.

Kanban Metodolojisi Altında Scrum Master’ın Önemi

  1. Akışın İzlenmesi: Kanban Metodolojisi, iş akışının görsel bir şekilde izlenmesini vurgular. Scrum Master, ekip üyelerine Kanban tahtasının etkili kullanımını öğretir ve iş akışının sürekli olarak optimize edilmesine yardımcı olur.
  2. Sınırlamaların Yönetimi: Kanban’da sınırlamalar (WIP limitleri), aynı anda ele alınabilecek iş miktarını sınırlar. Scrum Master, bu sınırlamaların doğru bir şekilde belirlenmesine ve uygulanmasına yardımcı olur.
  3. Engellerin Giderilmesi: Kanban’da da engeller ortaya çıkabilir. Scrum Master, ekip üyelerinin bu engelleri belirlemesine ve çözmesine yardımcı olur, böylece iş akışı kesintiye uğramaz.
  4. Hızlı Teslimat ve Süreç İyileştirmesi: Kanban, sürekli teslimat ve süreç iyileştirmeyi vurgular. Scrum Master, ekip üyelerinin hızlı ve düzenli teslimat yapmalarına yardımcı olurken, süreçleri düzenli olarak gözden geçirerek iyileştirme fırsatları arar.
  5. Ekip İletişimi ve İş birliği: Kanban’da da ekip içi iletişim ve iş birliği önemlidir. Scrum Master, ekip üyeleri arasındaki iletişimi teşvik eder ve daha iyi iş birliği sağlamaya çalışır.

Özetle, Scrum Master’ın rolü, her iki metodolojinin se başarılı bir şekilde uygulanmasında kritik bir öneme sahiptir. Scrum Master, ekip üyelerini destekleyerek, süreçleri ve uygulamaları etkili bir şekilde yöneterek, iletişimi teşvik ederek ve sürekli öğrenme ve gelişmeye olanak sağlayarak Agile yaklaşımının temel prensiplerini hayata geçirir.

Her yeni başlangıç zorluklarla doludur, ancak doğru yaklaşımlar ve süreçlerle bu zorlukların üstesinden gelmek mümkündür. Başarılı Agile projeleri için, Scrum Master’ın öncülüğünde, tüm ekip üyeleriyle birlikte uyumlu ve verimli bir çalışma ortamı oluşturmak esastır.

Author: Betül Kaya