<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Kipngeno Gregory</title>
    <description>The latest articles on Forem by Kipngeno Gregory (@gregory42266270).</description>
    <link>https://forem.com/gregory42266270</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2807834%2Fbcb230b8-c235-4700-96bd-46a489022cb8.jpg</url>
      <title>Forem: Kipngeno Gregory</title>
      <link>https://forem.com/gregory42266270</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/gregory42266270"/>
    <language>en</language>
    <item>
      <title>How a Data Pipeline and Machine Learning Can Modernize DNA Paternity Testing in Kenya</title>
      <dc:creator>Kipngeno Gregory</dc:creator>
      <pubDate>Mon, 11 May 2026 04:42:44 +0000</pubDate>
      <link>https://forem.com/gregory42266270/how-a-data-pipeline-and-machine-learning-can-modernize-dna-paternity-testing-in-kenya-3ph6</link>
      <guid>https://forem.com/gregory42266270/how-a-data-pipeline-and-machine-learning-can-modernize-dna-paternity-testing-in-kenya-3ph6</guid>
      <description>&lt;h2&gt;
  
  
  A Pre-Research Article | Data Science, Data Pipelines &amp;amp; Genomic Informatics
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Paternity testing is one of the most legally and emotionally consequential applications of forensic science. In Kenya, demand for DNA paternity testing has grown sharply over the past decade, with laboratories such as the Bioinformatics Institute of Kenya now processing upwards of 125 cases every month, many feeding directly into court proceedings around child support, custody, and inheritance. Yet the infrastructure underpinning these tests remains largely manual, time-intensive, and constrained by limited laboratory capacity and a near-total absence of a national forensic &lt;strong&gt;DNA database&lt;/strong&gt;.&lt;br&gt;
This article makes the case that machine learning (ML), combined with a well-engineered data pipeline, offers a credible and practical path toward faster, more scalable, and more consistent paternity determination. It surveys the existing research landscape, identifies the specific gaps that remain unaddressed in the African genomic context, and outlines the architecture of a data pipeline that could serve as the foundation for an ML-assisted paternity testing system designed for the Kenyan environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The Problem: Paternity Disputes in the Kenyan Legal System&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Paternity testing accounts for over 90% of all DNA tests conducted in Kenya. Cases span a wide range of contexts: child maintenance and custody battles in family courts, inheritance disputes, immigration documentation, and increasingly, personal verification outside any legal process.&lt;br&gt;
The bottleneck is not awareness; demand is clearly there and growing. The bottleneck is capacity. Until recently, Kenya had only one institution authorised to conduct forensic DNA testing: the Government Chemist, a government-run laboratory that has historically struggled with case backlog. A second public laboratory was later established at the Kenya Medical Research Institute (KEMRI), and a small number of private providers, notably the Bioinformatics Institute of Kenya (BIK) and EasyDNA Kenya, now operate in the market.&lt;br&gt;
Despite this growth, several structural problems persist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No national forensic DNA database exists&lt;/strong&gt;. Bodies are disposed of without DNA records. Cold cases cannot be cross-referenced against stored profiles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual interpretation remains the norm&lt;/strong&gt;. Short Tandem Repeat (STR) profiles are compared by trained analysts, introducing potential for human error and analyst inconsistency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Turnaround times are slow&lt;/strong&gt;. Legal-grade tests can take days to weeks, delaying court proceedings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Population-specific allele frequency data for East African populations is sparse&lt;/strong&gt;. Most STR allele frequency databases are built on European, East Asian, or American reference panels; which affects the statistical accuracy of paternity index calculations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. How DNA Paternity Testing Currently Works&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before discussing machine learning applications, it is worth briefly describing how the current process works.&lt;br&gt;
Modern paternity testing uses &lt;em&gt;Short Tandem Repeats (STRs)&lt;/em&gt;, sections of the genome where a short sequence of base pairs (the "repeat unit") is repeated a variable number of times from person to person. Because the number of repeats at each STR locus is highly variable across individuals, and because a child inherits one allele at each locus from each parent, comparing STR profiles across child, mother, and alleged father allows analysts to determine whether the father's alleles are present in the child's DNA.&lt;br&gt;
The output of this process is a &lt;em&gt;Combined Paternity Index (CPI)&lt;/em&gt;, a likelihood ratio that expresses how much more likely it is that the tested man is the biological father versus a random unrelated man from the same population. A CPI above 10,000 (corresponding to a probability of paternity above 99.99%) is typically required for a legal determination.&lt;br&gt;
The standard in Kenya involves 24 genetic markers. The Bioinformatics Institute of Kenya, for example, offers a 24-marker test that it describes as superior to the panels used by most law enforcement laboratories in the country and across Africa.&lt;br&gt;
The weakness in this process is two-fold: it requires skilled human analysts at every step, and the statistical power of the CPI calculation depends on accurate, population-specific allele frequency tables, which, for East African populations, are still being developed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. What the Research Says: Machine Learning and DNA Kinship Analysis&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A growing body of peer-reviewed research now demonstrates that machine learning can meaningfully contribute to DNA-based kinship and paternity analysis. The work spans several different approaches.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.1 Deep Neural Networks on STR Data&lt;/strong&gt;&lt;br&gt;
A 2023 paper published in the &lt;em&gt;Journal of Intelligent Systems&lt;/em&gt; proposed replacing manual STR matching with a Deep Neural Network (DNN) trained on 15-locus STR data. The researchers created a synthetic familial dataset, augmented it to increase sample size, and trained a DNN to predict paternity. This was among the first studies to directly position deep learning as a substitute for, rather than a supplement to, manual forensic interpretation.&lt;br&gt;
The paper explicitly acknowledged that in developing countries, conventional kinship analysis techniques result in inadequate accuracy when dealing with large STR datasets, largely because of the human labour required for profile-by-profile comparison.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.2 Random Forest and SVM on mtDNA Sequences&lt;/strong&gt;&lt;br&gt;
A study published on PubMed (NIH) applied four machine learning classifiers, Support Vector Machines (SVM), Linear Discriminant Analysis (LDA), Quadratic Discriminant Analysis (QDA), and Random Forest (RF), to mitochondrial DNA hypervariable region I sequences. The data covered African, Asian, and Caucasian samples.&lt;br&gt;
The results were encouraging: a Bag-of-Words + PCA + Random Forest combination achieved 94.4% accuracy in predicting genetic relatedness, outperforming all other configurations. Critically, this study is one of the few to explicitly include African DNA samples, making its findings directly relevant to the Kenyan context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.3 SNP-Based Kinship Panels with Supervised ML&lt;/strong&gt;&lt;br&gt;
A 2024 paper in &lt;em&gt;Expert Systems&lt;/em&gt; with &lt;em&gt;Applications&lt;/em&gt; introduced a novel panel of 4,849 Single Nucleotide Polymorphisms (SNPs) and applied supervised machine learning to classify kinship relationships across more than 150,000 simulated pairs. The panel was designed to overcome the limitations of STR-based methods for detecting second-degree and more distant relationships.&lt;br&gt;
A key feature of this study was its transparency:&lt;br&gt;
the full codebase was made publicly available on &lt;a href="https://github.com/GiuliaCosenza/New-SNPs-panel-for-kinship-inference" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, making it an accessible starting point for researchers who want to replicate or extend the work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.4 Dynamic Programming and ML for DNA Sequence Classification&lt;/strong&gt;&lt;br&gt;
A two-part research series by Dr. Ernest Bonat and colleagues, published on Medium in 2024, explored using dynamic programming (specifically the Smith-Waterman and Needleman-Wunsch sequence alignment algorithms) in combination with machine learning classifiers for paternity DNA sequence classification. Part 2 of the series moved into feature engineering, DNA natural language processing (treating nucleotide sequences as text for embedding and classification), and model deployment strategies.&lt;br&gt;
This work is notable for its practical orientation; it was designed with real-world deployment in hospital and laboratory settings in mind, using efficient, low-cost hardware platforms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.5 AI-Assisted Allele Calling in Forensic DNA Analysis&lt;/strong&gt;&lt;br&gt;
A 2025 preprint on bioRxiv demonstrated that deep learning models can outperform traditional rule-based systems for allele calling in forensic DNA electropherogram analysis. The researchers showed that deep learning eliminates much of the manual inspection currently required to classify electrophoresis signals into categories such as alleles, stutter artefacts, and baseline noise; the core step in any STR-based DNA test.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. The Gap That Remains: East African Population Data&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Despite this research momentum, a significant gap persists. The overwhelming majority of &lt;strong&gt;ML models&lt;/strong&gt; for DNA kinship analysis have been trained on datasets drawn from &lt;strong&gt;European&lt;/strong&gt;, &lt;strong&gt;East Asian&lt;/strong&gt;, or broadly &lt;strong&gt;American&lt;/strong&gt; populations. &lt;strong&gt;Allele&lt;/strong&gt; frequency distributions vary meaningfully across ethnic groups, and a paternity index calculated using a European allele frequency table applied to a Luo, Kikuyu, or Kalenjin profile will produce an inaccurate probability estimate.&lt;br&gt;
This is not a minor technical footnote; it is a potential source of serious legal error.&lt;br&gt;
Addressing it requires two things: first, building and publishing a properly annotated STR/SNP allele frequency reference panel for major Kenyan and East African population groups; and second, retraining or fine-tuning kinship ML models on that East African reference data.&lt;br&gt;
This is the specific research contribution that has not yet been made and that this project intends to address.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Proposed Data Pipeline Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The data pipeline proposed for this research is designed to take raw STR genotype data as input and produce a paternity probability as output&lt;br&gt;
The pipeline is structured across five stages:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 1: Data Ingestion and Standardisation&lt;/strong&gt;&lt;br&gt;
Raw genotype data from laboratory electrophoresis systems is &lt;strong&gt;ingested&lt;/strong&gt; in standard file formats (e.g., .csv, FASTA, or vendor-specific formats from Applied Biosystems or equivalent instruments). Data is &lt;strong&gt;standardised&lt;/strong&gt; to a consistent allele notation format, and metadata (sample ID, locus names, collection date, chain-of-custody flags) is &lt;strong&gt;attached&lt;/strong&gt;.&lt;br&gt;
&lt;strong&gt;Tools&lt;/strong&gt;: Python (pandas, biopython), validation schemas, format converters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 2: Allele Frequency Reference Construction&lt;/strong&gt;&lt;br&gt;
For each STR locus in the panel, allele frequencies are computed from a reference population dataset. Where East African population data is available (from published studies, KEMRI archives, or ethically sourced anonymised samples), it is used as the primary reference. Where gaps exist, published African population data from sources such as the 1000 Genomes Project is used as a fallback, clearly flagged.&lt;br&gt;
&lt;strong&gt;Output&lt;/strong&gt;: A locus-by-allele frequency matrix, stratified by population group where sufficient data is available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 3: Feature Engineering&lt;/strong&gt;&lt;br&gt;
Each trio of profiles (child, mother, alleged father) is transformed into a structured feature vector. Features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Per-locus allele match/mismatch flags between child and alleged father&lt;/li&gt;
&lt;li&gt;Per-locus likelihood ratios (using the allele frequency reference from Stage 2)&lt;/li&gt;
&lt;li&gt;Combined Paternity Index (CPI) computed using the classical formula&lt;/li&gt;
&lt;li&gt;Encoded nucleotide sequences (using k-mer or one-hot encoding, for deep learning branches of the pipeline)&lt;/li&gt;
&lt;li&gt;Population group label (where known)
&lt;strong&gt;Tools&lt;/strong&gt;: scikit-learn (preprocessing), numpy, custom STR feature extraction functions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stage 4: Model Training and Evaluation&lt;br&gt;
Multiple model families are trained and benchmarked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Baseline&lt;/strong&gt;: Logistic Regression and Gradient Boosted Trees (for interpretability and legal transparency)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intermediate&lt;/strong&gt;: Random Forest (strong performance in existing literature on genetic relatedness)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced&lt;/strong&gt;: Deep Neural Network trained on locus-by-allele matrix representations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sequence model (experimental)&lt;/strong&gt;: Transformer-based model treating nucleotide sequences as text, for cases where raw sequence data is available&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All models are evaluated using stratified cross-validation. Primary metrics are &lt;strong&gt;accuracy&lt;/strong&gt;, &lt;strong&gt;F1-score&lt;/strong&gt;, and &lt;strong&gt;critically calibration&lt;/strong&gt; (how well predicted probabilities correspond to actual paternity likelihoods). For a legal application, a poorly calibrated model that outputs overconfident probabilities is more dangerous than a slightly less accurate but well-calibrated one.&lt;br&gt;
&lt;strong&gt;Tools&lt;/strong&gt;: &lt;strong&gt;scikit-learn&lt;/strong&gt;, &lt;strong&gt;tensorflow/keras&lt;/strong&gt;, &lt;strong&gt;xgboost&lt;/strong&gt;, &lt;strong&gt;matplotlib&lt;/strong&gt; and &lt;strong&gt;shap&lt;/strong&gt; for interpretability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 5: Output and Reporting&lt;/strong&gt;&lt;br&gt;
The pipeline produces a structured report containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Predicted paternity probability with confidence interval&lt;/li&gt;
&lt;li&gt;Per-locus CPI breakdown (for transparency and legal review)&lt;/li&gt;
&lt;li&gt;SHAP-based feature importance plot (showing which loci drove the prediction)&lt;/li&gt;
&lt;li&gt;A plain-language summary suitable for inclusion in a court document&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. Why This Matters: The Broader Argument&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This pipeline is not intended to remove DNA analysts from the paternity testing process. In a legal context, the chain-of-custody requirements, the professional accountability of a qualified scientist, and the right of courts to examine and cross-examine expert witnesses all require that human expertise remain central.&lt;br&gt;
What the pipeline addresses is the bottleneck before the analyst signs off. The manual steps of computing per-locus paternity indices, constructing the CPI, and interpreting the result against a population reference are repetitive, time-consuming, and, when allele frequency tables are mismatched to the test population; potentially inaccurate. Automating and standardising those steps with a well-validated ML model makes the analyst's job faster, frees up laboratory capacity, and if the underlying allele frequency data is East African, makes the result more statistically appropriate for the populations actually being tested in Kenyan courts.&lt;br&gt;
There is also a longer-term argument. Kenya currently has no national forensic DNA database. As paternity and forensic DNA testing scales, the data generated by each test represents a potential building block for such a database. A well-designed data pipeline, built with data governance and privacy protections from the ground up, could eventually support population-level allele frequency studies, cold case investigations, and missing persons identification, all areas where current Kenyan capacity is severely limited.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Research Questions and Next Steps&lt;/strong&gt;&lt;br&gt;
This pre-article identifies the following research questions that the forthcoming full paper and associated project will address:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. How accurately can an ML model trained on East African STR data predict paternity, compared to the classical CPI-based statistical method?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;2. Which model architecture (logistic regression, random forest, DNN) offers the best balance between predictive accuracy and interpretability for court-admissible use?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;3. How significant is the degradation in paternity index accuracy when non-African allele frequency references are applied to East African DNA profiles?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;4. Can a data pipeline for paternity testing be built that meets Kenya's legal chain-of-custody requirements while significantly reducing per-case analyst time?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The next steps are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complete a systematic literature review extending the sources identified here&lt;/li&gt;
&lt;li&gt;Establish a data acquisition plan (simulated datasets for training; anonymised, ethically sourced real STR profiles where possible)&lt;/li&gt;
&lt;li&gt;Develop and test the five-stage pipeline described above&lt;/li&gt;
&lt;li&gt;Write and submit the full research paper&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;8. Resources and References&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Peer-Reviewed Papers&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.degruyterbrill.com/document/doi/10.1515/jisys-2023-0041/html" rel="noopener noreferrer"&gt;&lt;strong&gt;A Deep Neural Network Model for Paternity Testing Based on 15-Loci STR for Iraqi Families (2023)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8856515/" rel="noopener noreferrer"&gt;&lt;strong&gt;ML to Predict Genetic Relatedness Using Human mtDNA, African, Asian, Caucasian Samples&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sciencedirect.com/science/article/pii/S0957417424030288" rel="noopener noreferrer"&gt;&lt;strong&gt;Kinship Analysis and ML Algorithms with a New NGS Panel, 4,849 SNPs (ScienceDirect, 2024)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.biorxiv.org/content/10.1101/2025.06.02.656996.full.pdf" rel="noopener noreferrer"&gt;&lt;strong&gt;Making AI Accessible for Forensic DNA Profile Analysis (bioRxiv, 2025)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sciencedirect.com/science/article/pii/S2589871X20300267" rel="noopener noreferrer"&gt;&lt;strong&gt;Multidisciplinary Forensic DNA Training in Kenya, KEMRI Perspective (ScienceDirect)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC11424183/" rel="noopener noreferrer"&gt;&lt;strong&gt;NASTRA: Accurate STR Analysis by Nanopore Sequencing (PMC, 2024)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Research Articles&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ernest-bonat.medium.com/advanced-paternity-dna-sequence-classification-using-dynamic-programming-and-machine-learning-bb84c1470883" rel="noopener noreferrer"&gt;&lt;strong&gt;Advanced Paternity DNA Sequence Classification Using Dynamic Programming and ML Part 1 (Bonat, 2024)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ernest-bonat.medium.com/advanced-paternity-dna-sequence-classification-using-dynamic-programming-and-machine-learning-889622345316" rel="noopener noreferrer"&gt;&lt;strong&gt;Advanced Paternity DNA Sequence Classification Using Dynamic Programming and ML Part 2 (Bonat, 2024)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repositories&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/annashcherbina/sherlockstoolkit" rel="noopener noreferrer"&gt;&lt;strong&gt;Forensic DNA pipeline: SNP/STR → kinship, ancestry, mixture analysis&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/generality/Kinship-testing" rel="noopener noreferrer"&gt;&lt;strong&gt;Likelihood ratio model for STR and SNP kinship testing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/GiuliaCosenza/New-SNPs-panel-for-kinship-inference" rel="noopener noreferrer"&gt;&lt;strong&gt;Full code for the 2024 ScienceDirect SNP kinship paper&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DivyaratanPopli/Kinship_Inference" rel="noopener noreferrer"&gt;&lt;strong&gt;Pairwise relatedness from ancient DNA with contamination correction&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/AnJingwd/STRsearch" rel="noopener noreferrer"&gt;&lt;strong&gt;End-to-end STR profiling pipeline for massively parallel sequencing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Kenya-Specific Context&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.theeastafrican.co.ke/scienceandhealth/Kemri-paternity-testing-to-a-forensic-data-bank" rel="noopener noreferrer"&gt;&lt;strong&gt;KEMRI DNA Lab and the Case for a National Forensic Database&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nation.africa/kenya/life-and-style/inside-kenya-s-paternity-testing-boom-4801328" rel="noopener noreferrer"&gt;&lt;strong&gt;Inside Kenya's Paternity Testing Boom (Nation Africa, 2024)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kibs.co.ke/services/dna-test-kenya.php" rel="noopener noreferrer"&gt;&lt;strong&gt;Bioinformatics Institute of Kenya 24-Marker Paternity Test&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.easydnakenya.com/legal-dna-test/" rel="noopener noreferrer"&gt;&lt;strong&gt;EasyDNA Kenya, Legal / Court-Admissible Testing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;9. Closing Note&lt;/strong&gt;&lt;br&gt;
This project is an attempt to begin filling that gap. The pipeline described here is a starting point, not an endpoint. The research paper that follows this pre-article will provide a more formal treatment of the methods, a detailed experimental evaluation, and where the results support it, a clear argument for why ML-assisted paternity testing should be considered as a complement to existing forensic laboratory practice in Kenya.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Pre-research article. All research questions and pipeline architecture are prospective. Full methodology and results will be published in the forthcoming research paper.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;by &lt;strong&gt;&lt;a href="https://gregory.co.ke/" rel="noopener noreferrer"&gt;Kipngeno Gregory&lt;/a&gt;&lt;/strong&gt; Data and Software Engineer&lt;/p&gt;

</description>
    </item>
    <item>
      <title>ANOVA or Analysis Of Variance</title>
      <dc:creator>Kipngeno Gregory</dc:creator>
      <pubDate>Thu, 16 Oct 2025 06:47:33 +0000</pubDate>
      <link>https://forem.com/gregory42266270/anova-or-analysis-of-variance-493f</link>
      <guid>https://forem.com/gregory42266270/anova-or-analysis-of-variance-493f</guid>
      <description>&lt;h2&gt;
  
  
  ANOVA: Comparing Multiple Groups Efficiently
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Analysis of Variance (ANOVA) is a statistical method used to determine if there are significant differences between the means of three or more groups. Instead of running multiple t-tests (which increases error rates), ANOVA provides a single test for overall group differences.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Example: Marketing Campaign Testing
&lt;/h2&gt;

&lt;p&gt;A company tests four different advertising strategies (A, B, C, D) to see which generates the most sales:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Campaign A: 45, 48, 50, 47, 46 sales&lt;/li&gt;
&lt;li&gt;Campaign B: 52, 55, 53, 54, 51 sales&lt;/li&gt;
&lt;li&gt;Campaign C: 60, 58, 62, 59, 61 sales&lt;/li&gt;
&lt;li&gt;Campaign D: 40, 42, 38, 41, 39 sales&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;ANOVA answers: Are these sales differences statistically significant, or just random variation?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How It's Used:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Research: Compare multiple treatments in medicine&lt;/li&gt;
&lt;li&gt;Business: Test different pricing strategies&lt;/li&gt;
&lt;li&gt;Education: Evaluate teaching methods&lt;/li&gt;
&lt;li&gt;Manufacturing: Compare production methods&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;code&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import scipy.stats as stats
import pandas as pd

# Sample data: Sales from 4 marketing campaigns
campaign_a = [45, 48, 50, 47, 46]
campaign_b = [52, 55, 53, 54, 51]
campaign_c = [60, 58, 62, 59, 61]
campaign_d = [40, 42, 38, 41, 39]

# Perform one-way ANOVA
f_stat, p_value = stats.f_oneway(campaign_a, campaign_b, campaign_c, campaign_d)

print(f"F-statistic: {f_stat:.2f}")
print(f"P-value: {p_value:.4f}")

if p_value &amp;lt; 0.05:
    print("result: Significant differences exist between campaigns")
else:
    print("result: no significant differences between campaigns")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Output Interpretation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;P-value &amp;lt; 0.05: Significant differences exist&lt;/li&gt;
&lt;li&gt;P-value ≥ 0.05: No significant differences&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When to Use ANOVA:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Comparing 3+ groups&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Testing one categorical variable&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Meeting assumptions: normal distribution, equal variances&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;resources :&lt;a href="https://github.com/learn-co-curriculum/ANOVA_seattle-chicago-dsc" rel="noopener noreferrer"&gt;github&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;by &lt;a href="https://gregory-tech.netlify.app/" rel="noopener noreferrer"&gt;gregory.tech&lt;/a&gt;&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>datascience</category>
      <category>learning</category>
    </item>
    <item>
      <title>Understanding Skewness and Kurtosis</title>
      <dc:creator>Kipngeno Gregory</dc:creator>
      <pubDate>Mon, 29 Sep 2025 05:12:31 +0000</pubDate>
      <link>https://forem.com/gregory42266270/understanding-skewness-and-kurtosis-4a0g</link>
      <guid>https://forem.com/gregory42266270/understanding-skewness-and-kurtosis-4a0g</guid>
      <description>&lt;h2&gt;
  
  
  When analyzing datasets, it’s not enough to know measures of central tendency (mean, median, mode) and variability (variance, standard deviation).
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Skewness: The Measure of Asymmetry
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition: Skewness measures the degree and direction of asymmetry in a distribution around its mean.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Formula:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Skewness=(n1​∑i=1n​(xi​−xˉ)2)3/2n1​∑i=1n​(xi​−xˉ)3​

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Real-Life Example:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Income distribution&lt;/strong&gt; → Often positively skewed because most people earn average wages, but a small number of high earners stretch the tail to the right.&lt;br&gt;
&lt;strong&gt;Exam scores&lt;/strong&gt; → If most students score high but a few fail badly, the distribution is negatively skewed.&lt;/p&gt;
&lt;h2&gt;
  
  
  Kurtosis: The Measure of Tailedness
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition: Kurtosis measures the heaviness of tails in a distribution compared to a normal distribution.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Formula:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Kurtosis=(n1​∑i=1n​(xi​−xˉ)2)2n1​∑i=1n​(xi​−xˉ)4​
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;A normal distribution has kurtosis ≈ 3 (called mesokurtic).&lt;/li&gt;
&lt;li&gt;To make interpretation easier, analysts often use excess kurtosis = kurtosis – 3.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Real-Life Example:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stock returns → Usually leptokurtic (heavy-tailed). This means extreme ups and downs occur more frequently than in a normal curve.&lt;/li&gt;
&lt;li&gt;Heights of people → Typically close to mesokurtic, since extreme deviations are rare.&lt;/li&gt;
&lt;li&gt;Uniform distribution → Often platykurtic (light-tailed), with fewer outliers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Difference&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skewness →&lt;/strong&gt; Tells us about the direction of data spread (left, right, or symmetric).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kurtosis →&lt;/strong&gt; Tells us about the intensity of tails (normal, heavy, or light).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why It Matters
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Understanding skewness and kurtosis helps analysts:&lt;/li&gt;
&lt;li&gt;Detect outliers and anomalies.&lt;/li&gt;
&lt;li&gt;Choose suitable statistical models (many assume normality).&lt;/li&gt;
&lt;li&gt;Improve preprocessing before applying machine learning.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;by &lt;a href="https://gregory-tech.netlify.app/" rel="noopener noreferrer"&gt;gregory.tech&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Are We Really Ready for the Next Silicon Savannah?</title>
      <dc:creator>Kipngeno Gregory</dc:creator>
      <pubDate>Tue, 23 Sep 2025 02:15:20 +0000</pubDate>
      <link>https://forem.com/gregory42266270/are-we-really-ready-for-the-next-silicon-savannah-11ch</link>
      <guid>https://forem.com/gregory42266270/are-we-really-ready-for-the-next-silicon-savannah-11ch</guid>
      <description>&lt;p&gt;&lt;strong&gt;Kenya has proudly worn the crown of the “Silicon Savannah” for over a decade, fueled by innovations like M-Pesa and a vibrant startup scene. But as we enter a new era, one driven by Big Data, Web3, and AI, it is worth asking: are we truly ready to lead the next wave of global technological transformation?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Data Dilemma: Are We Owners or Just Sources?
&lt;/h2&gt;

&lt;p&gt;Kenya’s data powers global AI, but who owns the results? Are we shaping the future, or just supplying the raw material while others cash in?&lt;/p&gt;

&lt;p&gt;If we don’t invest in local talent, sovereign data repositories, and home-grown AI, we’ll stay data laborers in someone else’s revolution. It’s time to decide: do we build, or just get mined?&lt;/p&gt;

&lt;h2&gt;
  
  
  Web3: Decentralised Promise, Centralised Risks?
&lt;/h2&gt;

&lt;p&gt;Web3 promises decentralization and inclusion, but in Kenya, it’s mostly about crypto trading. Where are the startups using blockchain to fix land fraud, or smart contracts to secure farmer supply chains?&lt;/p&gt;

&lt;p&gt;If we focus only on speculation, Web3 risks becoming a bubble for the few. True readiness means clear regulation, blockchain skills development, and building tools that solve real problems, not just pump coins.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Employment Paradox: Will AI Create or Displace?
&lt;/h2&gt;

&lt;p&gt;AI introduces a critical dilemma for Kenya's workforce: while promising new opportunities, it directly threatens entry-level tech roles in data entry and customer service through automation. The urgent question is whether our education system is pivoting fast enough to train for future roles like AI ethics and prompt engineering, rather than obsolete skills. Success requires a radical shift towards fostering critical thinking and creativity to ensure Kenyans become pilots of AI, not its passengers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Green Dilemma: Can a Tech Boom be Eco-Conscious?
&lt;/h2&gt;

&lt;p&gt;The digital world has a very real physical cost. Training large AI models consumes enough energy to power hundreds of homes for a year. Blockchain networks, depending on their model, can be incredibly energy-intensive.&lt;/p&gt;

&lt;p&gt;As a nation celebrated for its commitment to renewable energy and natural beauty, how do we reconcile this with the carbon footprint of advanced tech? Pushing for AI and Web3 without a "Green Tech" policy is unsustainable, which begs for the questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;1.How can we power our data centers with our abundant geothermal and solar energy?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2.What are our policies for the e-waste that will inevitably come from the hardware required for this tech leap?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;3.Are we incentivizing startups that use AI and data to solve environmental challenges, such as optimizing water use or predicting climate impact on agriculture?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Silicon Savannah cannot be a success if it turns into a digital wasteland. Our tech evolution must be inherently sustainable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Readiness now means:
&lt;/h2&gt;

&lt;p&gt;1.&lt;strong&gt;Building Data Sovereignty:&lt;/strong&gt; Treating data as a strategic national asset.&lt;/p&gt;

&lt;p&gt;2.&lt;strong&gt;Fostering Deep-Tech Innovation:&lt;/strong&gt; Moving beyond consumer apps to fund and support foundational AI and Web3 projects.&lt;/p&gt;

&lt;p&gt;3.&lt;strong&gt;Future-Proofing Education:&lt;/strong&gt; Radically reshaping our curriculum to prepare for an AI-augmented world.&lt;/p&gt;

&lt;p&gt;4.&lt;strong&gt;Embedding Sustainability:&lt;/strong&gt; Making green principles non-negotiable in our tech policy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;What do you think? Is Kenya ready to lead the next wave of tech innovation? Share your thoughts.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;by &lt;a href="https://gregory-tech.netlify.app/" rel="noopener noreferrer"&gt;gregory.tech&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
    </item>
    <item>
      <title>Beyond Functional: Writing Professional and Performant SQL Queries</title>
      <dc:creator>Kipngeno Gregory</dc:creator>
      <pubDate>Sun, 21 Sep 2025 13:03:36 +0000</pubDate>
      <link>https://forem.com/gregory42266270/beyond-functional-writing-professional-and-performant-sql-queries-11ac</link>
      <guid>https://forem.com/gregory42266270/beyond-functional-writing-professional-and-performant-sql-queries-11ac</guid>
      <description>&lt;h2&gt;
  
  
  Structured Query Language (SQL) is one of the most widely used languages for interacting with databases, yet even experienced developers often make subtle mistakes that affect performance, readability, and security. Writing high-quality SQL queries is critical for &lt;strong&gt;scalability&lt;/strong&gt;, &lt;strong&gt;maintainability&lt;/strong&gt;, and &lt;strong&gt;efficiency&lt;/strong&gt;.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  1. The Siren Call of &lt;code&gt;SELECT *&lt;/code&gt; Instead of Explicit Columns
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; &lt;code&gt;SELECT *&lt;/code&gt; retrieves every column from a table, even those not needed. This increases network load, slows down queries, and can break applications if the schema changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Always specify the exact columns you need:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SELECT id, name, created_at FROM users;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-- Instead of:
SELECT * FROM orders;

-- Use:
SELECT order_id, customer_id, order_date, total_amount
FROM orders;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This improves performance and keeps your queries predictable.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Neglecting the Power of Indexes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Queries that filter large tables without proper indexes often result in full table scans, significantly slowing down performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Mistake:&lt;/strong&gt; Writing predicates that prevent index usage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common culprits include:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wrapping a column in a function: &lt;code&gt;WHERE YEAR(order_date) = 2023&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Using a wildcard at the beginning of a &lt;code&gt;LIKE&lt;/code&gt; pattern:&lt;code&gt;WHERE customer_name LIKE '%Smith%'&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;OR&lt;/code&gt; conditions on different columns without appropriate indexes.
&lt;strong&gt;The Impact:&lt;/strong&gt; The query forces a full table scan, which becomes exponentially slower as the table grows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Ensure that columns used in &lt;code&gt;WHERE&lt;/code&gt;, &lt;code&gt;JOIN&lt;/code&gt;, and &lt;code&gt;ORDER BY&lt;/code&gt;clauses are indexed where appropriate. Always analyze query execution plans to confirm indexes are being used.&lt;br&gt;
&lt;code&gt;code&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-- Instead of (non-sargable):
SELECT * FROM orders WHERE YEAR(order_date) = 2023;

-- Use (sargable - Search ARGument ABLE):
SELECT * FROM orders WHERE order_date &amp;gt;= '2023-01-01' AND order_date &amp;lt; '2024-01-01';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Mishandling &lt;code&gt;NULL&lt;/code&gt; Values
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Failing to account for &lt;code&gt;NULL&lt;/code&gt; values can produce unexpected results, especially with comparison operators.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Use &lt;code&gt;IS NULL&lt;/code&gt; or &lt;code&gt;COALESCE()&lt;/code&gt; or &lt;code&gt;IS NOT NULL&lt;/code&gt; or &lt;code&gt;IFNULL()&lt;/code&gt; to handle null values explicitly:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SELECT COALESCE(email, 'kipngenogregory@gmail.com') AS safe_email FROM users;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-- Instead of (will not find NULL phone numbers):
SELECT * FROM customers WHERE phone_number = NULL;

-- Use:
SELECT * FROM customers WHERE phone_number IS NULL;

-- To safely perform calculations:
SELECT product_id, price * COALESCE(quantity, 0) AS estimated_value FROM order_items;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Improper Filtering in &lt;code&gt;GROUP BY&lt;/code&gt;and &lt;code&gt;HAVING&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;A confusion between the &lt;code&gt;WHERE&lt;/code&gt; and &lt;code&gt;HAVING&lt;/code&gt; clauses leads to inefficient queries.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Mistake: Using the &lt;code&gt;HAVING&lt;/code&gt; clause to filter rows before aggregation.&lt;/li&gt;
&lt;li&gt;The Impact: The &lt;code&gt;HAVING&lt;/code&gt; clause filters groups after they have been aggregated. Filtering individual rows first is the job of the WHERE clause, which is far more efficient as it reduces the working data set before the costly aggregation operation.
The Professional Approach: Use &lt;code&gt;WHERE&lt;/code&gt; to filter rows. Use &lt;code&gt;HAVING&lt;/code&gt; to filter groups.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-- Inefficient:
SELECT customer_id, COUNT(order_id) AS order_count
FROM orders
GROUP BY customer_id
HAVING customer_id &amp;gt; 100; -- Filtering on a single row *after* grouping

-- Efficient:
SELECT customer_id, COUNT(order_id) AS order_count
FROM orders
WHERE customer_id &amp;gt; 100  -- Filter rows *before* grouping
GROUP BY customer_id;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;By eschewing &lt;code&gt;SELECT *&lt;/code&gt;, respecting indexes, handling &lt;code&gt;NULLs&lt;/code&gt;correctly, using explicit joins, and filtering strategically, you elevate your code from merely functional to truly exceptional. This leads to systems that are faster, more reliable, and easier to debug—a hallmark of a true data professional.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;by gregory.tech&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>database</category>
      <category>performance</category>
      <category>sql</category>
    </item>
    <item>
      <title>The Best "Man" Wins: Why the Vibe Coder vs. Engineer Debate is Over</title>
      <dc:creator>Kipngeno Gregory</dc:creator>
      <pubDate>Wed, 17 Sep 2025 11:39:53 +0000</pubDate>
      <link>https://forem.com/gregory42266270/the-best-man-wins-why-the-vibe-coder-vs-engineer-debate-is-over-6lg</link>
      <guid>https://forem.com/gregory42266270/the-best-man-wins-why-the-vibe-coder-vs-engineer-debate-is-over-6lg</guid>
      <description>&lt;p&gt;You’ve seen the convo. It’s on tech spaces, in Slack channels, and over coffee. On one side: the Vibe Coder, the modern hacker who intuits, iterates, and ships with an almost artistic flow. On the other: the Engineer, the disciplined architect for whom structure, tests, and scalability are non-negotiable.&lt;/p&gt;

&lt;p&gt;The dialogue is often framed as a battle of chaos versus order, a holy war for the soul of development.&lt;/p&gt;

&lt;p&gt;But it’s a false flag. The winner isn’t one or the other. The winner is the one who knows which tool to use, and when.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Rise of the Vibe
&lt;/h2&gt;

&lt;p&gt;Let’s be clear: the Vibe Coder is ascendant for a reason. Their toolkit is a product of our time: Copilot, ChatGPT, Claude, and Serverless. They don’t just code; they conduct. They describe an intention a vibe and the AI pair programmer translates it into functional code.&lt;/p&gt;

&lt;p&gt;This isn’t laziness. It’s leverage.&lt;/p&gt;

&lt;p&gt;They are the engine of the MVP, the solo founder validating an idea over a weekend, the creative dev building breathtaking interactive art. Their currency is speed and instinct, and in the right context, it’s a superpower.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Inevitable Crash
&lt;/h2&gt;

&lt;p&gt;But every superpower has a kryptonite. The unchecked Vibe Coder’s kryptonite is Scale.&lt;/p&gt;

&lt;p&gt;We’ve all seen it or inherited it. The prototype that “just worked” becomes a production nightmare. The repository becomes a museum of clever hacks that no one understands. The lack of tests, architecture, or documentation creates a technical debt that cripples progress. When the vibe checks out, all that’s left is the chaos.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bedrock of the Engineer
&lt;/h2&gt;

&lt;p&gt;This is where the Engineer, often unfairly maligned as slow or rigid becomes indispensable. They are the anti-chaos agents. They build the platforms, databases, and frameworks that the Vibe Coder relies upon. They are the ones who scale the successful MVP into a robust system that can handle millions.&lt;/p&gt;

&lt;p&gt;Their domain is mission-critical systems: finance, aviation, healthcare. Places where “it works on my machine” isn’t just a meme; it’s a catastrophic failure point. Their value isn’t in raw speed, but in predictable, lasting power.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Synthesis: The Context-Aware Developer
&lt;/h2&gt;

&lt;p&gt;So, who wins? The Vibe Coder or the Engineer?&lt;/p&gt;

&lt;p&gt;The best “man” wins. And the best man is the developer who refuses to be just one thing.&lt;/p&gt;

&lt;p&gt;The modern tech landscape doesn’t demand you pick a side. It demands you master both modes.&lt;/p&gt;

&lt;h2&gt;
  
  
  1.Vibe Mode:
&lt;/h2&gt;

&lt;p&gt;For ideation, prototyping, exploration, and personal projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  2.Engineer Mode:
&lt;/h2&gt;

&lt;p&gt;For refactoring, scaling, working in legacy systems, and writing critical path code. &lt;/p&gt;

&lt;p&gt;The most valuable player on any team is the one who can pivot from a frenetic, AI-powered coding session to methodically diagramming a system architecture and understand why both are essential.&lt;/p&gt;

&lt;p&gt;The debate was never about which style is better. It was about context. The future belongs not to the pure Vibe Coder or the pure Engineer, but to the hybrid, the developer agile enough to harness intuition and discipline in equal measure.&lt;/p&gt;

&lt;p&gt;The one who uses the right tool for the job.&lt;/p&gt;

&lt;p&gt;That’s who wins.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;by gregory.tech&lt;/p&gt;
&lt;/blockquote&gt;

</description>
    </item>
    <item>
      <title>Similarities Between Stored Procedures and Python Functions</title>
      <dc:creator>Kipngeno Gregory</dc:creator>
      <pubDate>Mon, 08 Sep 2025 05:39:27 +0000</pubDate>
      <link>https://forem.com/gregory42266270/similarities-between-stored-procedures-and-python-functions-jmb</link>
      <guid>https://forem.com/gregory42266270/similarities-between-stored-procedures-and-python-functions-jmb</guid>
      <description>&lt;p&gt;&lt;strong&gt;While residing in different technological layers—SQL in the database and Python in the application layer—stored procedures and Python functions are fundamental constructs that share a common philosophical goal: **modularity and reuse.&lt;/strong&gt;**&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Encapsulation of Logic&lt;/strong&gt;&lt;br&gt;
Stored Procedure: Encapsulates one or more SQL statements, along with procedural logic, into a single executable unit within the database. This hides the complexity of the underlying SQL and database schema from the application code.&lt;/p&gt;

&lt;p&gt;Python Function: Encapsulates a block of Python code that performs a specific task. This promotes the DRY (Don't Repeat Yourself) principle and isolates functionality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Parameterization&lt;/strong&gt;&lt;br&gt;
Stored Procedure: Defines input (IN), output (OUT), and input-output (INOUT) parameters.&lt;/p&gt;

&lt;p&gt;example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE PROCEDURE GetEmployee(IN emp_id INT)
BEGIN
    SELECT * FROM employees WHERE id = emp_id;
END;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python Function: Defines parameters in its signature, which can be positional, keyword, or have default values.&lt;br&gt;
example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def get_employee(emp_id):
    # ... code to fetch employee ...
    return employee_data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Reusability and Maintainability&lt;/strong&gt;&lt;br&gt;
Reusability: A single well-defined procedure or function eliminates code duplication. A change need only be made in one place.&lt;/p&gt;

&lt;p&gt;Maintainability: Fixing a bug or optimizing logic requires modification only within the procedure or function, not in every location where the logic was previously duplicated. This reduces errors and simplifies testing.&lt;/p&gt;

&lt;p&gt;_Conclusion:&lt;/p&gt;

&lt;p&gt;Stored procedures and Python functions are conceptual cousins. They both champion the software engineering principles of modularity, encapsulation, and reuse. A stored procedure is essentially the database's equivalent of a function—a specialized function designed for optimal, secure, and efficient data manipulation within the database engine._&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Understanding SQL Constructs: Subqueries, CTEs, and Stored Procedures</title>
      <dc:creator>Kipngeno Gregory</dc:creator>
      <pubDate>Mon, 08 Sep 2025 05:29:24 +0000</pubDate>
      <link>https://forem.com/gregory42266270/understanding-sql-constructs-subqueries-ctes-and-stored-procedures-1glb</link>
      <guid>https://forem.com/gregory42266270/understanding-sql-constructs-subqueries-ctes-and-stored-procedures-1glb</guid>
      <description>&lt;p&gt;&lt;strong&gt;In the realm of SQL and relational database management, efficiently retrieving and manipulating data is paramount.&lt;br&gt;
This article elucidates the differences between subqueries, Common Table Expressions (CTEs), and stored procedures.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Subquery (Nested Query)&lt;/strong&gt;&lt;br&gt;
A subquery, or nested query, is a SQL query embedded within the WHERE, FROM, or SELECT clause of another SQL query. Its primary role is to return a result set that the outer query uses for its execution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Characteristics:&lt;/strong&gt;&lt;br&gt;
Purpose: To compute a value or set of values for use in a filter, calculation, or as a derived table within a single, primary query.&lt;/p&gt;

&lt;p&gt;Scope &amp;amp; Lifetime: The subquery is executed for each row processed by the outer query (in some cases) and its result exists only for the duration of the main query's execution. It is not reusable.&lt;/p&gt;

&lt;p&gt;Readability: Can quickly become complex and difficult to read, especially when nested multiple levels deep (often called "nested hell").&lt;br&gt;
&lt;strong&gt;Use Case: Find all employees whose salary is above the company average.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT employee_name, salary
FROM employees
WHERE salary &amp;gt; (SELECT AVG(salary) FROM employees);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Common Table Expression (CTE)&lt;/strong&gt;&lt;br&gt;
A CTE, defined using the WITH clause, is a temporary named result set that exists only within the scope of a single SELECT, INSERT, UPDATE, or DELETE statement. It is primarily a tool for improving query organization and readability.&lt;br&gt;
&lt;strong&gt;Characteristics:&lt;/strong&gt;&lt;br&gt;
Purpose: To break down complex queries into simpler, logical, and reusable parts. CTEs make queries more readable and maintainable, and they enable recursive queries, which are impossible with standard subqueries.&lt;/p&gt;

&lt;p&gt;Scope &amp;amp; Lifetime: The CTE is defined at the beginning of a statement and can be referenced multiple times within that same statement. It is discarded after the statement executes.&lt;/p&gt;

&lt;p&gt;Readability: Significantly improves readability by allowing a modular, "step-by-step" approach to building queries.&lt;br&gt;
*&lt;em&gt;Use Case: *&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WITH RegionalSales AS (
    SELECT region_id, SUM(amount) AS total_sales
    FROM orders
    GROUP BY region_id
)
SELECT region_name, total_sales
FROM regions r
JOIN RegionalSales rs ON r.id = rs.region_id
WHERE rs.total_sales &amp;gt; 1000000;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Stored Procedure&lt;/strong&gt;&lt;br&gt;
A stored procedure is a precompiled collection of SQL statements and optional logic (variables, conditionals, loops) stored within the database itself. It is executed as a single unit, often to encapsulate a business logic operation.&lt;br&gt;
&lt;strong&gt;Characteristics:&lt;/strong&gt;&lt;br&gt;
Purpose: To encapsulate complex operations, promote code reuse, enhance security, and improve performance. They are used for data manipulation, data definition, and administrative tasks.&lt;/p&gt;

&lt;p&gt;Scope &amp;amp; Lifetime: Stored procedures are permanent database objects (like a table or view). They are stored on the server side and persist beyond a single query session.&lt;/p&gt;

&lt;p&gt;Readability: Encapsulates business logic, keeping application code cleaner. The logic is centralized within the database.&lt;br&gt;
&lt;strong&gt;Use Case:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE PROCEDURE PlaceNewOrder (
    IN p_customer_id INT,
    IN p_product_id INT,
    IN p_quantity INT
)
BEGIN
    START TRANSACTION;
    INSERT INTO orders (customer_id, order_date) VALUES (p_customer_id, NOW());
    INSERT INTO order_items (order_id, product_id, quantity) VALUES (LAST_INSERT_ID(), p_product_id, p_quantity);
    COMMIT;
END;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>ANALYSIS OF KENYAN CROPS DATASET: AGRICULTURAL INSIGHTS, TRENDS, AND OPPORTUNITIES</title>
      <dc:creator>Kipngeno Gregory</dc:creator>
      <pubDate>Sun, 24 Aug 2025 06:05:29 +0000</pubDate>
      <link>https://forem.com/gregory42266270/analysis-of-kenyan-crops-dataset-agricultural-insights-trends-and-opportunities-5da4</link>
      <guid>https://forem.com/gregory42266270/analysis-of-kenyan-crops-dataset-agricultural-insights-trends-and-opportunities-5da4</guid>
      <description>&lt;h2&gt;
  
  
  Key Insights:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Most Profitable Crop:&lt;/strong&gt; Potatoes led as the most profitable crop, followed closely by cassava and rice.&lt;br&gt;
&lt;strong&gt;Land Utilization:&lt;/strong&gt; Nairobi and Machakos counties allocated the highest land area to crop production.&lt;br&gt;
&lt;strong&gt;Revenue Leaders by Crop Type:&lt;/strong&gt; Cassava, potatoes, and rice generated the highest revenue.&lt;br&gt;
&lt;strong&gt;County Performance:&lt;/strong&gt; Machakos and Nyeri counties dominated in total revenue, particularly from potatoes, cassava, and rice.&lt;br&gt;
&lt;strong&gt;Seasonal Insights:&lt;/strong&gt; Dry seasons (35%) and long rains (33%) contributed the most to revenue, while short rains accounted for 31%.&lt;br&gt;
&lt;strong&gt;Yield Patterns:&lt;/strong&gt; Potatoes and rice recorded the highest average yields.&lt;br&gt;
&lt;strong&gt;Irrigation Methods:&lt;/strong&gt; Drip irrigation drove the highest profitability (43%), followed by flood (32%) and sprinkler irrigation (24%).&lt;br&gt;
&lt;strong&gt;Soil &amp;amp; Fertilizer Use:&lt;/strong&gt; Clay, loamy, and sandy soils supported the most revenue. Fertilizers CAN and DAP were most used and correlated with higher revenue.&lt;br&gt;
&lt;strong&gt;Monthly Revenue Trends:&lt;/strong&gt; Revenue peaked in March, April, and May, but dropped in August due to pest infestations, delayed harvests, and weather challenges.&lt;br&gt;
&lt;strong&gt;Profit Trends Over Time:&lt;/strong&gt; Profits fluctuated seasonally, but showed resilience in high-demand crops.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overall Insight:&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Potatoes, cassava, and rice are the backbone of Kenya’s agricultural profitability. Investments in drip irrigation, fertilizer optimization, and pest management can significantly improve yields and stabilize revenues.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;analysis by Kipngeno Gregory&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F45lrd7060fcxgrmruz9a.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F45lrd7060fcxgrmruz9a.jpg" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
    </item>
    <item>
      <title>an article on Excel’s Strengths, Weaknesses and the Role of Excel in Predictive Analysis</title>
      <dc:creator>Kipngeno Gregory</dc:creator>
      <pubDate>Sun, 10 Aug 2025 09:13:56 +0000</pubDate>
      <link>https://forem.com/gregory42266270/an-article-on-excels-strengths-weaknesses-and-the-role-of-excel-in-predictive-analysis-180k</link>
      <guid>https://forem.com/gregory42266270/an-article-on-excels-strengths-weaknesses-and-the-role-of-excel-in-predictive-analysis-180k</guid>
      <description>&lt;p&gt;&lt;strong&gt;an article on Excel’s Strengths and Weaknesses in Predictive Analysis and the Role of Excel in Making Data-Driven Business Decisions&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Microsoft Excel&lt;/strong&gt; remains fundamental tool for business analytics, offering accessible predictive capabilities despite its limitations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Strengths
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;It's User-Friendly&lt;/strong&gt; – Intuitive interface with no coding required for basic analysis.&lt;br&gt;
&lt;strong&gt;Has Built-in Tools **– Forecast Sheet, regression (via Data Analysis ToolPak), and What-If Analysis.&lt;br&gt;
**Ensures Rapid Visualization&lt;/strong&gt; – Charts, trendlines, and PivotTables simplify pattern recognition.&lt;br&gt;
*&lt;em&gt;Enables Integration *&lt;/em&gt;– Works with Power BI, SQL, and other enterprise systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Weaknesses
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Limited Computational Power-Excel&lt;/strong&gt; -struggles with large datasets (usually over a few hundred thousand rows).&lt;br&gt;
&lt;strong&gt;Basic Statistical Capabilities&lt;/strong&gt; -While Excel can handle simple regressions and forecasts, it lacks advanced machine learning algorithms and statistical methods found in &lt;em&gt;tools like Python, R&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;Error-Prone&lt;/strong&gt; – Manual processes increase risk of formula mistakes.&lt;br&gt;
*&lt;em&gt;Static Data *&lt;/em&gt;– No real-time analytics without manual refreshes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Role of Excel in Data-Driven Business Decisions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Exploratory Analysis **– Quick insights for SMEs and non-technical teams.&lt;br&gt;
**Scenario Modeling&lt;/strong&gt; – Tests business strategies (e.g., pricing, budgets).&lt;br&gt;
&lt;strong&gt;Transition Tool&lt;/strong&gt; – &lt;em&gt;Bridges gap between manual analysis and advanced BI platforms&lt;/em&gt;.&lt;br&gt;
&lt;strong&gt;Trend Forecasting&lt;/strong&gt; -Businesses can use Excel to project sales, expenses, or market growth using historical data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Excel may not compete with advanced machine learning platforms for highly complex predictive analysis, but its accessibility, flexibility, and visualization capabilities make it an indispensable tool in many organizations.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Data is the new oil-by &lt;em&gt;Kipngeno Gregory&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
    </item>
    <item>
      <title>How to Install and Set Up PostgreSQL on a Linux Server (Ubuntu)</title>
      <dc:creator>Kipngeno Gregory</dc:creator>
      <pubDate>Sat, 02 Aug 2025 11:05:02 +0000</pubDate>
      <link>https://forem.com/gregory42266270/how-to-install-and-set-up-postgresql-on-a-linux-server-ubuntu-2li</link>
      <guid>https://forem.com/gregory42266270/how-to-install-and-set-up-postgresql-on-a-linux-server-ubuntu-2li</guid>
      <description>&lt;h2&gt;
  
  
  Assignment 0 LUXDEV COHORT 4 JULY INTAKE
&lt;/h2&gt;

&lt;p&gt;1️⃣ Step 1: Update Your System&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update
sudo apt upgrade -y

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2️⃣ Step 2: Install PostgreSQL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install postgresql postgresql-contrib -y

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;postgresql: Core PostgreSQL database system.&lt;br&gt;
_postgresql-contrib: Additional useful tools and extensions.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;3️⃣ Step 3: Verify PostgreSQL Installation&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl status postgresql

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;_To start/stop/restart PostgreSQL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl start postgresql
sudo systemctl stop postgresql
sudo systemctl restart postgresql

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4️⃣ Step 4: Switch to PostgreSQL User&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo -i -u postgres

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;5️⃣ Step 5: Access PostgreSQL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;psql

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;To exit:&lt;/em&gt;&lt;br&gt;
&lt;code&gt;\q&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;6️⃣ Step 6: Secure PostgreSQL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\password postgres

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;7️⃣ Step 7: Create a New Database&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE DATABASE myappdb;
CREATE USER myappuser WITH ENCRYPTED PASSWORD 'mypassword';
GRANT ALL PRIVILEGES ON DATABASE myappdb TO myappuser;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;8️⃣ Step 9: Test Connection Locally&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;psql -h localhost -U myappuser -d myappdb

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;now you will have installed and configured PostgreSQL on your Linux server🙂&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;by Kipngeno Gregory&lt;/p&gt;
&lt;/blockquote&gt;

</description>
    </item>
  </channel>
</rss>
