Blog

  • The Intersection of My Religion and My LGBTQIA+ Activism

    The Question Hook

    “Have you ever been told that you have to choose between your soul and your self? For years, I was warned that my identity and my faith could never occupy the same room. But what if the gap between scripture and advocacy isn’t a canyon we fall into, but a bridge we build?”

    The idea that I had to choose between being a Christian and admitting that I was transgender was strange to me, but it is what other humans seemed to imply. I am too smart to think that other people or God can be fooled by dishonesty. A person who is of the LGBTQIA+ spectrum has the choice about whether to LIE about their feelings, but they can’t change them. Those who come out of the closet are just being honest with themselves and others, which, in my opinion, is always less sinful than the alternative of coming up with new lies.

    Although some claim that their faith caused a change in their gender identity or sexual orientation. I think these are not something the individual does but is forced to undergo over time. Either they are pleasing people and trying to conform to what their church teaches them, or perhaps being gay or transgender doesn’t seem to matter as much when they learn their purpose in life is better served as a single person who can do with fewer friends to influence them in the wrong direction.

    The Universal Code

    “In computing, a binary system uses ones and zeros to build infinite worlds, yet we treat the gender binary as a cage. What if God’s mind isn’t a simple ‘either-or,’ but a complex digital landscape? Understanding this logic didn’t just save my faith—it revealed how my advocacy is the ultimate prayer.”

    There have been moments when I almost feel I see something supernatural and beyond anything I was taught about God or the power of the soul. When I am deep into math algorithms used in my computer programs, I sometimes am shocked by the idea that math is a Universal Language, which is at least partially represented by programming languages and the traditional math notation used by physicists and other mathematicians. Humans may have invented the symbols used, but they never could have created numbers, colors, or geometric primitive because these things must exist before anything else can exist.

    Many religions cannot agree on how many gods there are or whether the one Christian God is split into 3 parts. Others like me tend to believe in a dualistic bi-theism where good and evil can only be defined when both exist. Otherwise, the statement that God is good and the devil is bad makes no sense.

    But beyond that, it is important to see that the binary numeral system is the closest way of representing this duality in computers. Perhaps this is why it is the checkerboard or the yin-yang of everything, I believe.

    The Provocative Question

    “What if respecting the identity of the LGBTQIA+ community is precisely what Jesus would have done if he walked the earth in 2026? Most assume faith and advocacy are at war, but I’m deconstructing that myth. Let’s reconcile tradition with authenticity to prove these worlds are beautifully and inherently compatible.”

    When looking at the character of Jesus. He spent a lot of time around the sinners and was often criticized by religious leaders for it. I like to think that Jesus might actually be a better example for people like me than he was for mainstream heterosexual and cisgender people.

    After all, if Jesus is God, and humans, both male AND female, are made in the image of God. Then clearly God is not simply a man or a woman. Even if he presented as a man two thousand years ago, this says very little about what he truly was before he came to inhabit a human body. The pronoun he is only a convenience and tradition, but I would not call it a reality, especially when I don’t identify with my birth sex because it never felt right.

    Of course, much of this is speculation, but I think it is fair to make connections to modern topics that were not discussed in ancient times but are relevant today. In fact, none of the things in the Bible match our modern society. There were no cars, airplanes, or computers in the ancient Middle East. The English language didn’t even exist back then.

    But there is no doubt that gay, transgender, and intersex people would have existed during Jesus’ time. The closest mention of it is what he said about eunuchs.


    "9 And I say unto you, Whosoever shall put away his wife, except it be for fornication, and shall marry another, committeth adultery: and whoso marrieth her which is put away doth commit adultery.

    10 His disciples say unto him, If the case of the man be so with his wife, it is not good to marry.

    11 But he said unto them, All men cannot receive this saying, save they to whom it is given.

    12 For there are some eunuchs, which were so born from their mother’s womb: and there are some eunuchs, which were made eunuchs of men: and there be eunuchs, which have made themselves eunuchs for the kingdom of heaven’s sake. He that is able to receive it, let him receive it." – Matthew 19:9-12


    Clearly, some of us were born different. I would argue that the LGBTQIA+ people were what Jesus was referring to, although the language we use today didn’t exist back then. Even if it had, we can assume most of Jesus’ audience were cisgender and heterosexual people. Those of us who are not like the majority must find our own path.

    And the final question that I think about every day is: Am I a eunuch for the kingdom of heaven’s sake? I am not sure what it means, but I can’t help but feel it is relevant in some way that I don’t have the education to understand.

  • Chastelib Readme and Manifesto

    Chastelib is a library I have been developing since mid 2025, though some of the functions have existed in some form for 20 years and have been hacked together as I needed them for projects. Over the past 6 months, I have refined them and have extensively documented the source code, and have even begun writing a manual on how to use them. This project will take years, as I have fun improving things and explaining why my own methods of outputting numbers now surpass the capabilities of the C and C++ standard libraries when it comes to printing integers in other bases.

    To my knowledge, nobody other than me uses these functions, but they are extremely easy to use by including header files or just copy pasting the functions you like into your own C and C++ projects.

    Core Function List

    • intstr: Convert an integer to astring in bases 2 to 36
    • strint: Convert a string in bases 2 to 36 to an integer
    • putstring: Print a zero-terminated string to standard output
    • putint: Print an integer using intstr and then putstr

    To understand the context of this library and how it came about, you have to know that I have been a C programmer for 25 years. Most of my projects are just toy programs for printing sequences of integers. Even more strange is that I enjoy bases other than ten, referred to as decimal by humans.

    Math is a game to me, and I do computer programming for fun. I also think that the C programming language is the best programming language to ever exist. However, there are some limitations that come with it.

    The printf family of functions can output formatted text containing arbitrary strings of text with format specifiers and arguments to print integers and floating point numbers.

    For integers, there is the %d for decimal, %u for unsigned decimal, %X for hexadecimal, and %o for octal. Although these are the most common number bases used, I prefer the option to print binary. The %b format specifier does exist as a GNU extension, but because I like my code to conform to the 1989 standard, I decided I should write my own set to manage the conversion of integers to and from strings that I can always rely on.

    Of the core functions, only putstring uses a C standard library function. It uses the low-level fwrite function to write a string after finding its length by searching for the terminating zero.

    Although simple, the putstring allows me flexibility when I am translating chastelib to use a new C library, or when I want to translate all the functions to another programming language.

    For example, when using other languages, I can’t rely on printf being available. Moreover, printf is a complicated function to write, and I have no idea how it actually works. When I tried translating my functions to Rust, having putstring as my trusted output function helped a lot. That being said, Rust is a painful language, and I stopped because it hurt my head too much, which is saying something, given how good I am at Assembly language on Intel platforms.

    The putstring function also helped when I was using ncurses because I could just change putstring to call addstr, which does the same thing in the context of terminal programs written with ncurses.

    The other functions don’t read or write to any devices and rely on putstring to show results. However, this means they execute very fast. Not only is C fast because it is a compiled language, but I have incrementally improved my algorithm over months to do the work quickly, and also made the code look good at the same time.

    Of all the functions used, strint is used the least because most of the time I am the only one providing input to my programs. If other people were using my programs, they would of course provide strings from the keyboard that would be parsed as integers. I have tested the function to ensure that it works correctly. In fact, my program chastehex was why the function was originally written. I could have had a generic hexadecimal converting function, but I made one that was flexible and supported any base from 2 to 36.

    Technical note: Base 36 is the highest base because digits 0 to 9 are used for digits less than ten. Letters A through Z are used as 10 to 35, whether they are uppercase or lowercase. The ten digits plus 26 letters of the English Alphabet provide a standard that programmers have used before I was even born. It is a good standard, and so I stuck with it.

    Future Extensions

    • floating point conversions
    • ncurses utilities

    The Github repository with the latest source is here:

    https://github.com/chastitywhiterose/chastelib

  • Determinism

    Do you believe in fate/destiny?

    I don’t believe in the religious concept of fate/destiny where the greek gods have decided what will happen in my life.

    However, things are still predetermined to happen as they do because I cannot control my body nor my desires.

    This is especially relevant today for example. I am sick and have not been able to breathe well enough to sleep well. I also had to call into work because I was too sick.

    I spent a long time recording podcasts explaining the illusion of free will back when I was Executive Producer of the Free Will, Science, and Religion podcast. This prompt about destiny reminded me of those days.

  • Pedophile

    If you could permanently ban a word from general usage, which one would it be? Why?

    I do not actually support banning words, but for the mental exercise and to make a point, I believe that people should stop using the word pedophile because they use it interchangeably with “child molester”.

    Stop conflating those who have harmed children with those who may have been born with an unfortunate attraction but still know better than to have sex with a child.

    • Not all pedophiles rape children.
    • Not all who rape children are pedophiles.

    Society has yet to have a serious discussion on this topic. When I see people say that we should “kill all pedophiles”, I am concerned about the innocent pedophiles who may have a sexual attraction to children but will never act on it because they know it is wrong to do so.

    Here is a simple fact. People do not have sex with everyone they are attracted to. First, they may be committed to celibacy; second, they may be monogamous and only have sex with their spouse, who they are no longer attracted to, but they have been married for 50 years, so they might as well. Third, we need to be wise in how we use our words so that we don’t mislead people into thinking we are talking about something we are not.

    But the question weighing on my mind most is, if someone is a pedophile, where do they go for help? To a therapist? To a pastor? I don’t really know what I would do if I were in their situation because anyone they go to for help will probably kill them or call the police and put them on a sex offender registry, even though they have never touched a child.

  • C chastelib core 2-25-2026

    There comes a time every so often when I find a typo in my source code. I recently found one in the C version of chastelib. I used the opportunity to expand on my existing comments to better explain the purpose of these functions which are used in my chastehex and chastecmp programs.

    I am also working on extension libraries to add to chastelib to support future command line utilities I might write, even if I don’t know what tools I will write. I have dreams of making my own small programming language but what I imagine is more complex that I am prepared for at my skill level and lack of free time.

    I just finished my Programming 2 class about C++ and I have to say that I still prefer C, even though there are some features of C++ such as function overloading that I find extremely cool.

    Anyway, read below this years edition of the 4 functions that make up the core of chastelib, my own standard library I am building.

    /*
     This file is a library of functions written by Chastity White Rose. The functions are for converting strings into integers and integers into strings.
     I did it partly for future programming plans and also because it helped me learn a lot in the process about how pointers work
     as well as which features the standard library provides, and which things I need to write my own functions for.
    
     As it turns out, the integer output routines for C are too limited for my tastes. This library corrects this problem.
     Using the global variables and functions in this file, integers can be output in bases/radixes 2 to 36
    */
    
    /*
     These two lines define a static array with a size big enough to store the digits of an integer, including padding it with extra zeroes.
     The integer conversion function always references a pointer to this global string, and this allows other standard library functions
     such as printf to display the integers to standard output or even possibly to files.
    */
    
    #define usl 32 /*usl stands for Unsigned String Length*/
    char int_string[usl+1]; /*global string which will be used to store string of integers. Size is usl+1 for terminating zero*/
    
     /*radix or base for integer output. 2=binary, 8=octal, 10=decimal, 16=hexadecimal*/
    int radix=2;
    /*default minimum digits for printing integers*/
    int int_width=1;
    
    /*
    This function is one that I wrote because the standard library can display integers as decimal, octal, or hexadecimal, but not any other bases(including binary, which is my favorite).
    My function corrects this, and in my opinion, such a function should have been part of the standard library, but I'm not complaining because now I have my own, which I can use forever!
    More importantly, it can be adapted for any programming language in the world if I learn the basics of that language.
    */
    
    char *intstr(unsigned int i)
    {
     int width=0;
     char *s=int_string+usl;
     *s=0;
     while(i!=0 || width<int_width)
     {
      s--;
      *s=i%radix;
      i/=radix;
      if(*s<10){*s+='0';}
      else{*s=*s+'A'-10;}
      width++;
     }
     return s;
    }
    
    /*
     This function prints a string using fwrite.
     This algorithm is the best C representation of how my Assembly programs also work.
     Its true purpose is to be used in the putint function for conveniently printing integers, 
     but it can print any valid string.
    */
    
    void putstring(const char *s)
    {
     int c=0;
     const char *p=s;
     while(*p++){c++;} 
     fwrite(s,1,c,stdout);
    }
    
    /*
     This function uses both intstr and putstring to print an integer in the currently selected radix and width.
    */
    
    void putint(unsigned int i)
    {
     putstring(intstr(i));
    }
    
    /*
     This function is my own replacement for the strtol function from the C standard library.
     I didn't technically need to make this function because the functions from stdlib.h can already convert strings from bases 2 to 36 into integers.
     However, my function is simpler because it only requires 2 arguments instead of three, and it also does not handle negative numbers.
    I have never needed negative integers, but if I ever do, I can use the standard functions or write my own in the future.
    */
    
    int strint(const char *s)
    {
     int i=0;
     char c;
     if( radix<2 || radix>36 ){printf("Error: radix %i is out of range!\n",radix);}
     while( *s == ' ' || *s == '\n' || *s == '\t' ){s++;} /*skip whitespace at beginning*/
     while(*s!=0)
     {
      c=*s;
      if( c >= '0' && c <= '9' ){c-='0';}
      else if( c >= 'A' && c <= 'Z' ){c-='A';c+=10;}
      else if( c >= 'a' && c <= 'z' ){c-='a';c+=10;}
      else if( c == ' ' || c == '\n' || c == '\t' ){break;}
      else{printf("Error: %c is not an alphanumeric character!\n",c);break;}
      if(c>=radix){printf("Error: %c is not a valid character for radix %i\n",*s,radix);break;}
      i*=radix;
      i+=c;
      s++;
     }
     return i;
    }
    
    /*
     Those four functions above are the core of chastelib.
     While there may be extensions written for specific programs, these functions are essential for absolutely every program I write.
     
     The only reason you would not need them is if you only output numbers in decimal or hexadecimal, because printf in C can do all that just fine.
     However, the reason my core functions are superior to printf is that printf and its family of functions require the user to memorize all the arcane symbols for format specifiers.
     
     The core functions are primarily concerned with standard output and the conversion of strings and integers. They do not deal with input from the keyboard or files. A separate extension will be written for my programs that need these features.
    */