Releases: lahtis/GeneSim
Release list
NameGen v1.3.1 (Xmas-Edition) bug fixed
-Bug fixed csv, json and plain code.
Full Changelog: 1.3.0...1.3.1
NameGen v1.3.0 (Xmas-Edition)
🎄 NameGen v1.3.0 (Xmas-Edition) Release Notes
We are proud to announce the most significant update in the history of GeneSim NameGen. Version 1.3.0, codenamed Xmas-Edition, transforms the program from a simple randomizer into a robust historical simulation engine.
This release focuses on stability, historical depth, and multilingual support.
🚀 New Features
1. Historical Periods (1850–1920)
The generator now supports seven (7) precisely defined historical eras. The database automatically filters names typical for the selected time, ensuring that 1860s characters do not receive 1920s names.
- Periods 1–7: Covering Finnish history from the Great Famine years to the early decades of independence.
- Intelligent Fallback Logic: If data is missing for a specific era, the engine automatically selects the closest historical match.
2. Advanced Family Simulation
Couple and family generation has been significantly improved:
- Maiden Names: The
--maiden-nameflag adds maiden names for wives (e.g., nee Laitinen). - Surname Synchronization:
--shared-surnameensures that family members carry the same last name. - Age Logic: Birth years are now calculated with biological plausibility between parents and children.
3. Multilingual Support (FI/EN)
The program is now fully internationalized. Users can choose the language for instructions and guidelines:
- Use
--lp fifor Finnish instructions and--lp enfor English.
🛠 Technical Improvements & Quality Assurance (QA)
The underlying architecture has been rebuilt to meet professional standards:
- Modular Architecture: The code is divided into clear modules (
args.c,generator.c,logic.c,output.c). - Deterministic Seeding (
--seed): The same seed always produces the exact same name, age, and family structure. - UTF-8 Support: Fixed character encoding issues to ensure Finnish characters (Å, Ä, Ö) display correctly in all environments.
- Automated Testing: A new Python-based test suite verifies JSON integrity and family logic consistency.
📦 Package Contents
The release includes:
- namegen.exe – Optimized Release binary.
- /data – Updated CSV name database.
- LICENSE – GPL v3.0 license text.
📜 License and Authors
- Author: Tuomas Lahteenmaki
- License: GNU General Public License v3.0
Merry Christmas to all GeneSim users! We hope this tool helps you create even more vivid historical worlds.
Full Changelog: 1.2.0...1.3.0
namegen
NameGen Project Raodmap
V.0.4.18 -- Demo Version (Initial Prototype)
- Non-Deterministic: Randomness was tied only to system time; results could not be reproduced.
- Invalid JSON: The birth year was printed outside the curly braces, making the output unreadable for other programs.
- Hardcoded Logic: Age and year generation were scattered across multiple functions, leading to logical inconsistencies.
- Encoding Issues: Finnish characters (ä, ö) often displayed incorrectly on Windows consoles.
- Fragmented Output: CSV, JSON, and Text modes were not synchronized, often showing different data for the same person.
v1.0.0 — The Foundation
- Core Logic: Successful loading of historical Finnish name data from CSV.
- CLI Engine: Robust argument parsing (count, period, verbose).
- Generation Modes: Support for individuals, couples, and basic family units.
v1.1.0 — Output Refinement
- Multi-Format Support: Implementation of Plain Text, CSV, and JSON output modes.
- UTF-8 Encoding: Fixed character display issues for Finnish vowels (ä, ö) on Windows.
- Bug Fixes: Resolved "undeclared variable" errors and standardized internal function signatures.
v1.2.0 — Stability & Determinism (Current Version)
- Deterministic Seeding: Added the --seed flag. The same seed now guarantees identical names, ages, and family structures every time.
- Valid Data Standards: Fixed the JSON schema. All data (including birth years) is now properly encapsulated within the JSON objects.
- Centralized Generation: Refactored the engine to ensure consistency across all formats (Text, CSV, JSON).
- Improved Logic: Synchronized birth years with historical periods (1–7) and improved the internal "Family" logic.
- Automated Testing: Introduced test.py to automatically verify data integrity and consistency.
- Production-Ready: Clean compilation with zero errors/warnings and full UTF-8 support for Finnish names.
namegen (demo)
What is changed
Release small 0.4.18 patch.
- Add a code to version_string handling to help and version flags.
- Show all period names to select interactive mode.
- Small text fixed.
Core Capabilities
These features define the program's fundamental abilities and data handling:
Period-Based Generation:
The program generates names specific to one of seven distinct historical periods (1860s to 1920s), ensuring historical plausibility for the names generated.
Data Driven:
Name generation is entirely driven by external CSV files (data/FI-fi/). The program loads these files into static structures based on the configuration defined in config.ini.
- Customizable Randomness: Allows precise control over the randomization of names, specifically:
- Selecting a specific Period (1-7) or using a Random Period (0).
- Setting the Maximum Number of Middle Names (1–3).
- Controlling the Chance of Including a Middle Name (0–100%).
- Age and Birth Year Integration: Supports an option (-A) to calculate and display the Year of Birth alongside the generated name, based on the selected period.
Generation Modes
The program supports three distinct modes for generating names, selectable via command-line flags or interactive prompts:
Single Name Generation
- Function: Generates one or more individual names (-n ).
- Customization: Full control over Gender (-g M/F), middle name settings, and the option to Exclude the Surname (-E).
Couple Generation
- Function: Generates a male and a female name designed to be a pair (-P).
- Key Feature: Automatically assigns a single, shared Surname to both the Male and Female name, maintaining genealogical consistency.
Family Generation
- Function: Generates a cohesive nuclear family unit (-F).
Key Features
- Generates Father and Mother names.
- Assigns a single, shared Surname to all family members.
- Supports either a Fixed Number of Children (-S ) or a Random Number of Children (-R) (1 to 5).
- Randomly determines the gender of each child.
Full Changelog: 0.4.17...0.4.18
namegen
Core Capabilities
These features define the program's fundamental abilities and data handling:
Period-Based Generation: The program generates names specific to one of seven distinct historical periods (1860s to 1920s), ensuring historical plausibility for the names generated.
- Data Driven: Name generation is entirely driven by external CSV files (data/FI-fi/). The program loads these files into static structures based on the configuration defined in config.ini.
- Customizable Randomness: Allows precise control over the randomization of names, specifically:
- Selecting a specific Period (1-7) or using a Random Period (0).
- Setting the Maximum Number of Middle Names (1–3).
- Controlling the Chance of Including a Middle Name (0–100%).
- Age and Birth Year Integration: Supports an option (-A) to calculate and display the Year of Birth alongside the generated name, based on the selected period.
🚀 Generation Modes
The program supports three distinct modes for generating names, selectable via command-line flags or interactive prompts:
-
Single Name Generation
Function: Generates one or more individual names (-n ).
Customization: Full control over Gender (-g M/F), middle name settings, and the option to Exclude the Surname (-E). -
Couple Generation
Function: Generates a male and a female name designed to be a pair (-P).
Key Feature: Automatically assigns a single, shared Surname to both the Male and Female name, maintaining genealogical consistency. -
Family Generation
Function: Generates a cohesive nuclear family unit (-F).
Key Features:
- Generates Father and Mother names.
- Assigns a single, shared Surname to all family members.
- Supports either a Fixed Number of Children (-S ) or a Random Number of Children (-R) (1 to 5).
- Randomly determines the gender of each child.
Full Changelog: 0.3.0...0.4.17
namegen
0.3.0 release.
Major Features 0.3.0
Multi-period NameLists
The code now uses separate DecadeData and NameList structures to handle names for up to seven different periods (decades), reflecting historical data segmentation.
Interactive Family & Couple Generation
The CLI and interactive modes support generating not just single names, but couples and families (including parents + children), with randomization of number of children and birth years.
Flexible Configuration Loading
The config file can override the default data paths for each category of names via load_config.
If the config file is missing, sensible defaults are used.
Verbose mode prints information about what was loaded.
Period-based Name Loading
New function load_names_period_list loads names from CSV files, treating each column as a different period, enabling the generation of historically plausible names.
Input Validation and Cleanup
Better trimming, input validation, and memory management of loaded names.
-
Options and Parameters
New/expanded options handled:
-p (period selection), now with a range 1–7, mapped to different decades.
-g (gender), now ignored in couple/family modes.
-P (couple) and -F (family).
-A (age/birth year simulation).
-k/--kids and random kids.
-S (set specific surname override).
-L (exclude surname).
-m, -M for middle name customization.
Many of these parameters are also prompted in interactive mode, with sensible defaults and input validation. -
Verbose Output
When verbose, after file loading, the code prints the count of names per period for the loaded CSVs (e.g., male/female first and middle names for period 7).
-
Internationalization and Windows Support
Sets the console encoding for Unicode on Windows.
Uses setlocale(LC_ALL, ""). -
Help Message Updates
The CLI help text now reflects all new options, including --family, --age, --middle-chance, --max-middle-names, etc.
-
Memory Management
Proper freeing of dynamic memory for name lists, config paths, and cleaning up at exit.
Summary
Main new features:
Period/decade-based name generation: More historically accurate names.
Family and couple generator: Can simulate parents/children with customizable parameters.
Configurable and more robust file loading.
Interactive mode with much richer option prompts.
Improvements:
Verbose stats.
Better input validation and memory cleanup.
Help/version updated for new functionality.
Full Changelog: 0.2.1...0.3.0
namegen
Release Notes: Version 0.2.1 (Patch)
Version 0.2.1 is a small patch that makes interactive use smoother by adding support for pair generation (-P) directly to queries. At the same time, the help text has been cleaned up by removing unnecessary mention of interactive mode.
New Features and Improvements (Interactive Mode)
Interactive Pair Generation: The program now asks in interactive mode if the user wants to generate names for a couple (Male + Female).
New question: "Generate names for a couple (M+F)? (1=Yes, 0=No, default 0):"
If the choice is 'Yes', the program automatically switches to the couple generation logic (generates a surname for the male and copies it to the female).
Improved Query Text: The number of names to be generated (count) is now asked for either "names" or "couples" depending on the context.
Code and Documentation Cleanup
Removed Redundant Sentence: Removed from the help text (-h / --help) the unnecessary sentence "Without flags, the program asks for the season interactively."
Buffer Cleanup: Interactive input handling has been improved by using while ((c = getchar()) != '\n' && c != EOF); to clean up the input buffer before a new scanf() call, which prevents buffer-related errors (e.g. pressing Enter getting stuck in the buffer).
Full Changelog: 0.2.0...0.2.1
namegen
The namegen.exe program is a command-line utility likely used for generating names, couple names, or surnames based on specific rules and settings.
Release Notes: Version 0.2.0
Summary
Version 0.2.0 introduces robust data validation to ensure the integrity of the name lists, preventing non-name strings (like internal data tags) from appearing in generated names. Additionally, this release significantly enhances the middle name generation functionality by adding support for multiple middle names.
✨ New Features
Maximum Middle Names Control (-M / --max-middle-names): The user can now specify the maximum number of middle names to be generated (up to 3). This introduces more variety in generated names, for example: Matti Johannes Kustaa Virtanen.
Usage (Command Line): -M 2 (Generates 1 or 2 middle names, based on chance).
Usage (Interactive): New interactive prompt: "Max middle names (1-3, default 1):"
🐛 Bug Fixes and Data Quality
Strict Data Validation Implemented: Added an internal function (is_valid_name) to validate all names loaded from the CSV files. The loader now only accepts strings containing alphabetic characters, spaces, and hyphens (-).
Fixes: This specifically resolves the issue where non-name strings (like internal data entry artifacts, e.g., "1870-29") could be loaded as a valid name, resulting in corrupted output.
Improved Error Handling: The name loading function now prints a clear warning to stderr when an invalid name candidate is skipped in verbose mode (-v).
💻 Developer Notes
The core functionality of load_names_multi_column and load_names_simple has been updated to incorporate is_valid_name function, ensuring cleaner data is passed to the generation logic.
The generate_and_print_name function now contains an internal loop to handle generating up to max_middle_names based on the defined probability.
If no flags are provided, the program will interactively ask for the season/period.
Full Changelog: 0.1.0...0.2.0
0.1.0
Namegen is a command-line based application designed to generate authentic Finnish names from specific historical periods.
A simple commandline name simulator that reads first-, middle-, and last name from historical CSV-files. And print 1 name to the screen. It can choose the second name with a 50% probability.
Full Changelog: https://github.com/lahtis/GeneSim/commits/0.1.0