working on XML still but everything else is fine

small-nav
chimchooree 4 years ago
parent 836971838e
commit 325ca2ec09

@ -3,7 +3,7 @@
march 4, 2021<br> march 4, 2021<br>
#godotengine #json #python <br> #godotengine #json #python <br>
<br> <br>
Similar to Magic: The Gathering and Guild Wars 1, the functionality of my skills is composed of keywords. For instance, a skill with the 'damage' keyword + 'bleeding' keyword will inflict pure damage + a bleeding status effect. <br> Similar to Magic: The Gathering cards, the functionality of my skills is composed of keywords. For instance, a skill with the 'damage' keyword + 'bleeding' keyword will inflict pure damage + a bleeding status effect. <br>
<br> <br>
Since skills derive their effects from existing keywords, each individual skill has very little to no unique code. Repetitive, formulaic tasks are better left to scripts, so I wrote a skillmaker to write skills for me. <br> Since skills derive their effects from existing keywords, each individual skill has very little to no unique code. Repetitive, formulaic tasks are better left to scripts, so I wrote a skillmaker to write skills for me. <br>
<br> <br>
@ -137,3 +137,5 @@ The output is a nested directory of all the skills, so I can just copy + paste t
<br> <br>
If I only had ten or eleven skills, then probably not. I'm planning on having around 40 skills per class, though, and I'm only one person. Since the skills are very formulaic, I'd rather have Python do all the copying + pasting for me while I worry about what makes my skills unique! <br> If I only had ten or eleven skills, then probably not. I'm planning on having around 40 skills per class, though, and I'm only one person. Since the skills are very formulaic, I'd rather have Python do all the copying + pasting for me while I worry about what makes my skills unique! <br>
<br> <br>
last updated March 6, 2021 <br>
<br>

@ -0,0 +1,30 @@
<!--201015,210121-->
<h1>making an rss feed</h1>
march 18, 2021<br>
#rss #webdev <br>
<br>
After a few months of quietly running my blog as practice, I want to start sharing my articles with other people. I looked over my favorite gamedev communities and saw that <a href="https://gamedev.net/">GameDev.net</a> apparently allows you syndicate a blog through RSS. I never thought about making an RSS feed, so why not? <br>
<br>
<h2>what is RSS? </h2><br>
Before the massive centralized content platforms came into the mainstream, the internet was more like a constellation of individual websites. In lieue of algorithm-driven feeds + push notifications from major social media, RSS was designed to bring content from individuals into one place. <br>
<br>
RSS and its predecessors have been around since the 90s. RSS 2.0 (what blessfrey.me uses) was published in 2002. Even through it's old and falling in popularity, it's still used by some large aggregator websites today like <a href="https://publishercenter.google.com/publications#p:id=pfehome">Google News</a> <br> and <a href="https://podcasters.spotify.com/submit">Spotify</a>. <br>
<br>
RSS files themselves are written in XML. They should contain the latest 10-15 entries with their things like their title, link, summary, date, and author. <br>
<br>
<h2>how to make an RSS feed </h2><br>
Blogging platforms like <a href="https://wordpress.org/support/article/wordpress-feeds/">WordPress</a> already take care of the RSS feed, but there's no shortage of third-party RSS creators on the internet. Since I have already written code to display + summarize my articles on the <a href="https://www.blessfrey.me/diary">diary</a> page, the 'latest' box in the diary's sidebar, and the 'news' box on the <a href="https://www.blessfrey.me/">index</a> page, I'm confident the process for generating an XML file with the same info won't too different. <br>
<br>
Apparely I need a DOM or ElementTree or something
<h2>examples of RSS feeds </h2><br>
Here's a few examples from around the internet: <br>
<ul>
<li><a href="https://www.theguardian.com/world/rss">The Guardian</a> </li>
<li><a href="https://www.gamasutra.com/blogs/rss/">Gamasutra</a> </li>
<li><a href="https://www.polygon.com/rss/index.xml">Polygon</a> </li>
<li><a href="https://store.steampowered.com/feeds/news.xml">Steam</a> </li>
<li><a href="https://www.gamedev.net/tutorials/rss/">GameDev.net</a> </li>
<li><a href="https://www.nasa.gov/rss/dyn/chandra_images.rss">NASA's Chandra Mission</a> </li>
<li><a href="https://www.temptalia.com/feed/">Temptalia</a> </li>
</ul>
<br>

@ -32,3 +32,18 @@ april 1, 2021<br>
<li>Made the <a href="https://www.blessfrey.me/credits">credits</a> more compliant with Godot Engine's <a href="https://docs.godotengine.org/en/latest/about/complying_with_licenses.html">Complying with Licenses</a> page. </li> <li>Made the <a href="https://www.blessfrey.me/credits">credits</a> more compliant with Godot Engine's <a href="https://docs.godotengine.org/en/latest/about/complying_with_licenses.html">Complying with Licenses</a> page. </li>
</ul> </ul>
<br> <br>
<h3>friday, march 5 </h3>
<ul>
<li>Developed an RSS feed to blessfrey.me. It's served as a static file through Bottle right now. I wonder if that's okay. </li>
</ul>
<br>
<h3>saturday, march 6 </h3>
<ul>
<li>Going through lots of accounts and deciding which ones to begin using again + which ones to delete. I should use my Fediverse and GameDev.net more, update my Ko-Fi, and pretty up my itch.io. And of course I need to post on Twitter more... Everything else should probably be deleted. </li>
<li>I had an Old School RuneScape account under the official blessfrey email? lol why </li>
<li>When I get a working version of Blessfrey that has all the current features together again, I'll upload it to blessfrey.me and itch.io. It'd be nice to just have something up at all, even if it's not so great. </li>
<li>I also should start seriously thinking about making videos, streams, podcasts, etc. I have lots of gamedev experience to draw from now that could make okay video essays + tutorials. I just...need to learn how to make videos. I wonder how much effort it would take to make one video a month? That wouldn't be a great gamedev channel, but just the idea of having videos sounds nice. Streaming would be easier once all the pretty scenes and channel art is set up. The format's better suited towards "watch me code"-style content, so I could probably stream more often than release videos. It's just awkward to explain what you're doing and make mistakes and read documentation live. </li>
<li>Too bad the little-bitty streaming sites never stay around for long - I prefer streaming on the smaller, more engaged communities than on Twitch or Youtube any day. Rest in peace. </li>
<li>At the end of the day, I'm mostly looking to have fun. I don't really have anything I want to promote or sell right now, but I like talking to people about gamedev. </li>
</ul>
<br>

@ -0,0 +1,153 @@
Finish your project with Spiral + AGILE
Hello. I'm learning gamedev, and teaching is part of learning. I hope sharing my notes on process helps a little.
Do you never actually finish projects? Software methodologies draw a road map to release something.
Videogames are complex and potentially neverending projects without limitations and a thoughtful approach. Exploratory programming can be enlightening, but a lack of limitations leads to nothing anyone will ever use. Moving forward with a clear process reduces the risk of the feature creep, too much complexity, and scope issues that leads to delays and project abandonment. There are a number of software methodologies that help manage software projects in particular. Im using a spiral methodology with AGILE.
Spiral
Spiral methodologys name is self-explanatory You work through iterative cycles of planning, risk management, developing, refactoring, and testing. You will naturally discover flaws in your original design or be inspired to add new features throughout the project, so you can always go back to the planning phase to properly consider them. If you are trying to force a solution through code, you can return to planning. You test early and often, gaining insight from yourself and playtesters on shortcomings and successes of your design and execution. You refactor periodically to reduce complexity and review your code critically, which paves the way for smoother development in the future. You also are encouraged to keep moving you cant over-analyze, overdo, over-optimize any particular step of the process.
Stage 1 is Planning by setting objectives, considering alternatives, and setting constraints. Stage 2 is Risk Management. Emphasize uncertain features when prototyping. Stage 3 is development and testing. Stage 4 is Evaluating. And back to Stage 1.
AGILE
AGILE is used by big important tech companies like IBM. Its cyclical with consistent time-frames (called “sprints”) of planning, working, and evaluating. Its different from spiral, though, as AGILE is more of a philosophy. At the end of a sprint, every team member is encouraged to review every part of the process as a group. Everyone stands up. Everyone talks candidly for a few minutes. Consider the value of your design, your tools, the length of the sprints, the nature of the review itself, everything. If any part of the process is flawed, catch it and change it early. Be flexible in your pursuit of the best process for the team.
MVP
Together, using a spiral methodology with AGILE, you should shoot for a minimum viable product (MVP). This could be a vertical slide, a horizontal slice, a demo, or something functional like that. Approach your project how Bob Ross approaches a painting. He doesnt spend a season on a little tree in the corner; he works the whole canvas and builds on his happy accidents. Find the joy of programming. Your game should be playable as soon as possible maybe ugly and dumb and pointless but playable. At any step, no matter how far you are from finishing, have something that works as a finished project.
To do that, you need to decide what the most essential and defining features of your game are and work on them first. Move on to less essential features as time goes on until your games done. Or until youre done working on it. Either way, youll have a playable game to offer people.
Prototype
If you're not even sure if your game is fun or possible, it's better to quickly test with a prototype. You can find a way to abstract your problem or distill it into something smaller to build or present to potential players. Use cut paper, quick sketches, action figures, free tilesets, whatever can represent your game cheaply and quickly. Maybe you can build a board or card game on paper that demonstrates your mechanic. Maybe you can make a room in your engine and spawn in too many items to test performance. Maybe you can share some key concept art or mockups with potential players and gauge responses. If you don't like your results, it's way easier to edit 20 minutes of construction paper than six months of production code.
When is my concept ready?
Your concept is all of your interesting ideas for your game. If it sounds like a fun game with concrete features, youre ready.
I keep my ideas in a personal wiki so I can see the inter-connectivity of my concepts. I also jot notes into a notes app on my phone. Writing it down is always better than keeping it floating in your head.
Make your concept actionable
Next, reword your concept into a series of unambiguous items that can be demonstrated clearly through your code. These are functional requirements. There are nonfunctional requirements, too, including the target framerate on specific hardware or the paradigm necessary to make modding more accessible. Just start writing them out in bullet points. You dont need to know all your function requirements yet, and you will have to rework parts of your project later anyways. If you use an iterative methodology, youll return to evaluating and planning phases plenty of times before release.
Pick a theme
Build your first functional requirements around a theme that is central to your game. I think AGILE calls it a story. For an RPG, it could be combat, maybe characters… Give each requirement a code to make them easily track-able.
Code your list
I start with character. Down the list, I name them AA, AB, AC, AD…
Functional Requirements - Character
• AA - A character has a name. Demonstrate that a character has a name by making a character and printing its name.
• AB - In a game, there can be multiple characters. Demonstrate that you can add a character and remove a character by printing the names of the existing characters.
• AC - A character can have abilities. The abilities belong to the character. Demonstrate by having multiple characters and printing their names and abilities.
• AD - There is a pool of abilities the character knows. There are abilities that they have equipped. Demonstrate by printing the abilities they know and the abilities they have equipped with their name.
• AE - Abilities can be added or removed from a character. Demonstrate by printing the list of abilities you know and the list of abilities you're using. Then add a new ability from the list you know to the list you are using and print the list of abilities you're using.
• AF - A character may not know all the possible abilities. Demonstrate by listing all of the abilities in the game. Then list all the abilities the character knows.
• AG - The character can't use abilities he doesn't know. Demonstrate by trying to add an ability from the list of all abilities in the game that the character doesn't know to the list of abilities the character is using. Print that you cannot do that.
• AH - The character can't have the same ability equipped more than once. Demonstrate by trying to add an ability the character already has equipped. Remove original from the slot it is in and add new ability to that slot. Print abilities character is using.
• AI - Skills go in slots and slots can be empty. Demonstrate by having no abilities in the character's slots and printing the list of skills the character is using. Put abilities in the slots and print what abilities is in each slot. Remove abilities from the slots and print what abilities is in each slot.
• AJ - When putting a skill in a slot that already has a skill, the skill is replaced. Demonstrate by having a skill in a slot then putting a new skill in that slot. Print the skill that is in that slot.
• AK - An item has a name. Demonstrate by printing an item's name.
• AL - There are items that can be put in a character's inventory. Demonstrate by adding an item to the character's inventory then printing what is in the inventory.
•AM - Characters have equipment slots. Demonstrate by adding an item to the equipment slots then printing what is in the equipment slots.
Rate by difficulty
Next, assign a difficulty level to each item. Do not focus on what you know; focus on what you do not know. The goal is to express your unknowns about the task. If you need to remember how to meet a requirement, if you dont know how to do a requirement, if you need to learn new tools in order to meet a requirement, youll face varying levels of unknowns. Unknowns increase risk, so they increase your difficulty rating.
I use Fibonacci numbers (1, 2, 3, 5, 8, 13,...) to represent difficulty levels. 1 is no problem at all, 3 is easy but with vague uncertainty, 13 has uncertainties upon uncertainties and should be broken into less risky tasks, etc.
There are two methods to rating difficulty. Assign your lowest difficult value to the easiest item on the list. (Thats what I do.) Or, find an item with an average difficulty relative to your list and assign it a middle number. If you are working on a team, you need to vote on each rating. The rating should represent the difficulty of the items for your team because you have not assigned individual work yet. Next, rate the other items relative to the it. If anything is rated conspicuously high, see if it can be broken into smaller, more manageable items.
This is an entirely subjective estimate. Dont worry too much about the exact difficulty you assign just approximate it. Youll give more accurate and meaningful ratings with practice.
Choose length of sprints
Choose a time-frame with enough time to get practical work done that is still granular. Dont worry too much about the perfect length of time you can always change the length of sprints at the next evaluation phase. I choose a week.
Choose this sprints functional requirements
Using the difficulty ratings, determine what is a weeks worth of work. Obviously, you can only pick items with prerequisites if you are also doing the prerequisites during the same sprint. Use the ratings to avoid being overwhelmed. Youll get better using your ratings with practice.
For a real company, you take this list and do it and no more for the duration of the sprint. You have other team members, other teams, clients, and all kinds of people who rely on the schedule. Disrupting that hurts the process of other people. If its just you or your team is small, you have more freedom to adjust your schedule if you severely misjudge the difficulty of your work. I finished the “weeks” worth of work in a few hours and was able to just add more requirements since its just me.
My initial first weeks requirements...
• (1) AA - A character has a name. Demonstrate that a character has a name by making a character and printing its name.
• (3) AB - In a game, there can be multiple characters. Demonstrate that you can add a character and remove a character by printing the names of the existing characters.
• (5) AC - A character can have abilities. The abilities belong to the character. Demonstrate by having multiple characters and printing their names and abilities.
• (5) AD - There is a pool of abilities the character knows. There are abilities that they have equipped. Demonstrate by printing the abilities they know and the abilities they have equipped with their name.
• (8) AE - Abilities can be added or removed from a character. Demonstrate by printing the list of abilities you know and the list of abilities you're using. Then add a new ability from the list you know to the list you are using and print the list of abilities you're using.
Next, write code that meets the requirements. Heres some output that demonstrates meeting the requirements:
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
========== RESTART: C:\Users\Toma\Pythons\Dungeon_Girls\src\game.py ==========
AA: A character has a name: Chloe
AB: There can be multiple characters.
AB: Characters: [Chloe, Willa]
AB: You can add a character.
AB: Characters: [Chloe, Willa, Destry, Eden]
AB: You can remove a character.
AB: Characters: [Chloe, Willa, Destry]
AC: Characters can know skills. Chloe: [Cure, Summon Archangel, Candlelight] & Willa: [Fireball, Demonspeak]
AD: Characters can know skills and have skills equipped.
AD:Chloe's library: [Cure, Summon Archangel, Candlelight] & skillbar: [None, Summon Archangel, Cure, Candlelight, None]
AE: Skills can be added to a character.
AE: Chloe: [Identify, Summon Archangel, Cure, Candlelight, None]
AE: Skills can be removed from a character.
AE: Chloe: [Identify, Summon Archangel, Cure, None, None]
>>>
Then you'll be able to evaluate your code and process, plan your next steps, maybe prototype something, maybe develop something, maybe refactor something, test, and continue the spiral. If you follow a methodology, I think your chances of finishing at least something is pretty good.
Thanks for reading.
Follow for more game development on Twitter @lilchimchooree.

@ -27,6 +27,7 @@ bandit king
basil basil
bell tower bell tower
birthday dress birthday dress
birthday girl
birthstone birthstone
black bear black bear
black market black market
@ -42,6 +43,7 @@ blue blood
blue rose blue rose
bluebell bluebell
bonfire bonfire
bossa nova
box garden box garden
breath of life breath of life
bubble bath bubble bath
@ -72,6 +74,7 @@ chalcedony
chameleon chameleon
chamomile chamomile
chandelier chandelier
chant
charmeuse charmeuse
cheese bread cheese bread
chiffon chiffon
@ -86,6 +89,7 @@ citrine
city of the dead city of the dead
clipart clipart
clover clover
cloud gray
cobweb cobweb
coin flip coin flip
cold iron cold iron
@ -109,6 +113,7 @@ dark hour
dark paradise dark paradise
death's-head hawkmoth death's-head hawkmoth
deep space deep space
denarius
diadem diadem
Diana Diana
diorama diorama
@ -121,6 +126,7 @@ double life
dragonfruit dragonfruit
dragonstone dragonstone
dreamweaver dreamweaver
dryad
dump truck dump truck
Dymer Dymer
dystopia dystopia
@ -129,6 +135,7 @@ edelweiss
egg hunt egg hunt
El Dorado El Dorado
elemental elemental
elf
elipse elipse
elixir of life elixir of life
emberlight emberlight
@ -145,6 +152,7 @@ fairy lights
fairy ring fairy ring
faun faun
favored soul favored soul
feather
femme covert femme covert
femme fatale femme fatale
fiery sword fiery sword
@ -153,7 +161,7 @@ fire opal
firebrand firebrand
fishing village fishing village
floating floating
flower woman flower girl
flying flying
folklore folklore
fountain of youth fountain of youth
@ -182,6 +190,7 @@ gold standard
golden apple golden apple
golden orb weaver golden orb weaver
golem golem
Grand Canyon
gray weather gray weather
griffon griffon
grove grove
@ -193,6 +202,7 @@ hand of God
the hanged man the hanged man
hanging garden hanging garden
happy place happy place
haunted
haunted house haunted house
headscarf headscarf
heart heart
@ -228,6 +238,7 @@ kaleidoscope
kesi silk kesi silk
kigurumi kigurumi
kingdom kingdom
koi pond
La Belle Sans Merci La Belle Sans Merci
labyrinth labyrinth
lady cat lady cat
@ -245,6 +256,7 @@ lighthouse
lily lily
lip gloss lip gloss
lip oil lip oil
litany
Little Red Riding Hood Little Red Riding Hood
lizardman lizardman
lobster lobster
@ -310,7 +322,9 @@ mural
muse muse
naga naga
necromancer necromancer
nectar
nightlight nightlight
nightmare
nocturnality nocturnality
nymph nymph
oneiromancer oneiromancer
@ -323,6 +337,7 @@ orb
orchid orchid
orichalcum orichalcum
orphan orphan
painted lady
palace palace
panda eyes panda eyes
paper crane paper crane
@ -361,8 +376,10 @@ proverb
psalm psalm
pseudonym pseudonym
pumpkin carving pumpkin carving
qirin
quiz show quiz show
rainbow rainbow
rainy day
raw honey raw honey
reaper reaper
reclining woman reclining woman
@ -405,6 +422,7 @@ sheep
shipwreck shipwreck
shoegaze shoegaze
shooting star shooting star
shoujo manga
silk silk
silk embroidery silk embroidery
singing sword singing sword
@ -425,6 +443,7 @@ spellbook
spelunking spelunking
spice cookie spice cookie
spiderweb spiderweb
spire
spirit animal spirit animal
spy spy
stained-glass stained-glass
@ -438,6 +457,7 @@ stinky cat
stone circle stone circle
stone face stone face
stone people stone people
stonewash
storm cloud storm cloud
strawberries and cream strawberries and cream
strawberry blonde strawberry blonde
@ -456,6 +476,7 @@ terrarium
three women three women
tide pool tide pool
tiger's eye tiger's eye
time traveler
toasted marshmallow toasted marshmallow
topaz topaz
topiary topiary

@ -0,0 +1,22 @@
Hello!
I'm chimchooree, the dev behind the Dungeon Girls RPG. Right now, it's just me handling the programming, pixel art, animations, and story-writing during my free-time.
What's Dungeon Girls?
Dungeon Girls - Active development Dungeon Girls is an after-school RPG that encourages experimenting with skills and making your class fit your play-style. Play smartphone apps while your friends gear up at the shopping center before jumping into the local dungeon.
Gameplay - You will make AI companions and rely on managing your team's skillsets to find creative strategies for combat and environmental puzzle solving. Each character's skillbar has limited slots and can only be modified in safe areas. You will build your skillbar based on the enemies' weaknesses, party needs, and skill synergies. Skills are not only useful in combat. Use skills to gain deeper interactions with NPCs, explore the map, and craft useful items.
When you're not fighting, hang out with friends, keep up with schoolwork, and uncover the mystery of the town.
Explain the Tiers
My tiers are simple and help keep the game development flowing. Documenting, reflecting, and planning is part of my natural process. It helps keep my vision consistent. I hope you appreciate the behind-the-scenes look.
Visitor - Everyone can read my blog and see pictures I upload.
$1 Fireball - Gain access to voting in polls.
$5 Alchemy - Receive a monthly micro webzine of my progress, whether it's in coding, art, animation, or planning. I already keep a daily diary on my computer, so I will edit for interest and make it a little pretty for you.
All patrons can participate in closed and open betas during beta periods. I need lots of different kinds of people to test the game. Contact me with bugs and if any part of the game feels awkward, ugly, or confusing. You'll help me polish the game. If you have any ideas, suggestions, or feedback, I'd love to hear it!
All patrons receive a game key on the platform of their choice whenever I release a game.
What's Patreon?
Patreon manages monthly payments in exchange for perks. If you're looking for a one-time tip jar, try https://ko-fi.com/chimchooree.
Have a nice day!

@ -1,6 +1,75 @@
import datetime, os, re import datetime, os, re
from bottle import error, response, route, run, static_file, template, TEMPLATE_PATH from bottle import error, response, route, run, static_file, template, TEMPLATE_PATH
def clean_tags(raw):
cleanr = re.compile('<.*?>')
cleantext = re.sub(cleanr, '', raw)
return cleantext
# rss feed
# RSS Generation
def make_rss():
loc = 'diary/entries/'
list_items(gather_and_sort(loc)[0:15])
info = {'items': list_items(gather_and_sort(loc)[0:15])}
# Delete old version
def clear_file(f_name):
if os.path.exists(f_name):
print("removing " + f_name)
os.remove(f_name)
f = open(f_name, 'a+')
# Return list of items using list of articles
def list_items(articles):
f_name = "static/xml/rss.xml"
loc2 = 'https://www.blessfrey.me/'
loc = 'diary/entries/'
loc3 = loc2 + loc
result = []
for article in articles:
path = loc + article
text = []
a = []
length = 0
text = article2list(article, loc)
a.append(find_title(text))
a.append(find_url(path))
a.append(clean_tags(prepare_rss_summary(text, path)))
a.append(find_timestamp(text))
result.append(a)
clear_file(f_name)
f = open(f_name, 'w')
f.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + '\n')
f.write("<rss version=\"2.0\">" + '\n')
f.write("<channel>" + '\n')
f.write("<title>blessfrey.me</title>" + '\n')
f.write("<description>chimchooree's dev space</description>" + '\n')
f.write("<link>https://www.blessfrey.me/</link>" + '\n')
f.write("<language>en-us</language>" + '\n')
f.write("<webMaster>chimchooree@mail.com</webMaster>" + '\n')
for r in result:
f.write("<item>" + '\n')
f.write("<title>" + r[0] + "</title>" + '\n')
f.write("<link>" + loc3 + r[1] + "</link>" + '\n')
f.write("<description>" + r[2] + "</description>" + '\n')
#f.write("<language>en-US</language>" + '\n')
f.write("<pubDate>" + "Mon, 22 Feb 2021 19:01 EST"+ "</pubDate>" + '\n')#r[3].replace('\n','') + "</pubDate>" + '\n')
#f.write("<dc:creator>chimchooree</dc:creator>" + '\n')
f.write("</item>" + '\n')
f.write("</channel>" + '\n')
f.write("</rss>" + '\n')
f.close()
return result
# recommendations
def list_rec(page): def list_rec(page):
loc = 'diary/entries/' loc = 'diary/entries/'
result = [] result = []
@ -119,6 +188,13 @@ def find_content(text):
pos += 1 pos += 1
return content return content
# Snip article and close any open list tags
def prepare_rss_summary(text, path):
content = snip_sentence(find_content(text), path)
if content.count('<ul>') > content.count('</ul>'):
content += '</ul>'
return content
# Snip article and close any open list tags # Snip article and close any open list tags
def prepare_article(text, path): def prepare_article(text, path):
content = snip_article(find_content(text), path) content = snip_article(find_content(text), path)
@ -142,6 +218,14 @@ def clean(result):
result = result.replace('</b>','') result = result.replace('</b>','')
return result return result
# Return first two sentences of article + " ... "
def snip_sentence(article, path):
article = clean(article)
limit = 100
result = article[0:min(len(article),limit)]
result = result.rsplit(' ',1)[0]
return result + " ... "
# Return first 300 words of article + " ... " # Return first 300 words of article + " ... "
def snip_article(article, path): def snip_article(article, path):
article = clean(article) article = clean(article)
@ -205,6 +289,11 @@ def serve_img(filename):
def serve_extra(filename): def serve_extra(filename):
return static_file(filename, root='static/extra', mimetype='text/plain', download=True) return static_file(filename, root='static/extra', mimetype='text/plain', download=True)
# Serve XML
@route('/static/xml/<filename:path>')#re:.*\.xml>')
def serve_xml(filename):
return static_file(filename, root='static/xml', mimetype='text/xml')
## Routes ## ## Routes ##
# 404 Error Page # 404 Error Page
@ -306,7 +395,14 @@ def ideabox():
info = {'css': 'box', 'title': 'blessfrey - idea box - a collection of inspiring concepts', 'words': fill_ideabox(), 'limit': 5, 'year': datetime.datetime.now()} info = {'css': 'box', 'title': 'blessfrey - idea box - a collection of inspiring concepts', 'words': fill_ideabox(), 'limit': 5, 'year': datetime.datetime.now()}
return template('ideabox.tpl', info) return template('ideabox.tpl', info)
# RSS feed
#@route('/rss')
#def rss():
# """rss feed"""
# return static_file("static/xml/rss.xml", root='static/xml', mimetype='text/xml')
## Main ## ## Main ##
if __name__ == '__main__': if __name__ == '__main__':
make_rss()
run(host='127.0.0.1', port=9001) run(host='127.0.0.1', port=9001)

@ -0,0 +1,100 @@
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>blessfrey.me</title>
<description>chimchooree's dev space</description>
<link>https://www.blessfrey.me/</link>
<language>en-us</language>
<webMaster>chimchooree@mail.com</webMaster>
<item>
<title>python writes my skills for me</title>
<link>https://www.blessfrey.me/diary/entries//diary/entries/210304</link>
<description>Similar to Magic: The Gathering cards, the functionality of my skills is composed of keywords. For ... </description>
<pubDate>Mon, 22 Feb 2021 19:01 EST</pubDate>
</item>
<item>
<title>february 2020: AI</title>
<link>https://www.blessfrey.me/diary/entries//diary/entries/210301</link>
<description>I just feel like rambling about games. week 1, february 1-6 #design #localization #writing tuesday, ... </description>
<pubDate>Mon, 22 Feb 2021 19:01 EST</pubDate>
</item>
<item>
<title>refactoring characters: black box </title>
<link>https://www.blessfrey.me/diary/entries//diary/entries/210218</link>
<description>The character script was one of blessfrey's first scripts. Since it's never seen a serious ... </description>
<pubDate>Mon, 22 Feb 2021 19:01 EST</pubDate>
</item>
<item>
<title>new year's resolution - making the most of 2021 </title>
<link>https://www.blessfrey.me/diary/entries//diary/entries/210204</link>
<description>Everyone had difficulties during 2020. A small part of that was losing my energy for programming ... </description>
<pubDate>Mon, 22 Feb 2021 19:01 EST</pubDate>
</item>
<item>
<title>january 2020: new year</title>
<link>https://www.blessfrey.me/diary/entries//diary/entries/210201</link>
<description>week 1, january 1-2 friday, january 1 - New Year's2020 is over. Things probably won't be ... </description>
<pubDate>Mon, 22 Feb 2021 19:01 EST</pubDate>
</item>
<item>
<title>web development resources</title>
<link>https://www.blessfrey.me/diary/entries//diary/entries/210121</link>
<description>I'll collect frequently used resources for web design here. CSS Grid Generator - build a ... </description>
<pubDate>Mon, 22 Feb 2021 19:01 EST</pubDate>
</item>
<item>
<title>inventory as a system diagram </title>
<link>https://www.blessfrey.me/diary/entries//diary/entries/210107</link>
<description>System diagrams illustrate how components interact within a system. It saves so much headache to ... </description>
<pubDate>Mon, 22 Feb 2021 19:01 EST</pubDate>
</item>
<item>
<title>december 2020: holiday season☆</title>
<link>https://www.blessfrey.me/diary/entries//diary/entries/210101</link>
<description>I didn't keep a diary very well this month;; This is mostly pieced together from my git history. I ... </description>
<pubDate>Mon, 22 Feb 2021 19:01 EST</pubDate>
</item>
<item>
<title>blessfrey graphic updates + mockups </title>
<link>https://www.blessfrey.me/diary/entries//diary/entries/201224</link>
<description>I iterate over the graphics periodically, so I can practice without worrying about polish. Here's ... </description>
<pubDate>Mon, 22 Feb 2021 19:01 EST</pubDate>
</item>
<item>
<title>common tropes from media </title>
<link>https://www.blessfrey.me/diary/entries//diary/entries/201210</link>
<description>I like collecting common tropes from games I play. Maybe it can it root out cliches? Or inspire ... </description>
<pubDate>Mon, 22 Feb 2021 19:01 EST</pubDate>
</item>
<item>
<title>november 2020: dear diary </title>
<link>https://www.blessfrey.me/diary/entries//diary/entries/201201</link>
<description>on topic Between the 8th and 15th, I wrote a Python script for generating Godot skill scenes from ... </description>
<pubDate>Mon, 22 Feb 2021 19:01 EST</pubDate>
</item>
<item>
<title>pretendOS - a game inspired by windows XP </title>
<link>https://www.blessfrey.me/diary/entries//diary/entries/201126</link>
<description>Getting started with blessfrey's AI was overwhelming, so I took a break and worked on a new game. I ... </description>
<pubDate>Mon, 22 Feb 2021 19:01 EST</pubDate>
</item>
<item>
<title>tidying up my skill phases </title>
<link>https://www.blessfrey.me/diary/entries//diary/entries/201112</link>
<description>In Godot Engine, you can call methods from a parent class by prefixing it with a period (.). So to ... </description>
<pubDate>Mon, 22 Feb 2021 19:01 EST</pubDate>
</item>
<item>
<title>october 2020: a blog that works</title>
<link>https://www.blessfrey.me/diary/entries//diary/entries/201101</link>
<description>week 1 #bottle #python #regularexpression #website thursday, october 1 blessfrey.me's diary ... </description>
<pubDate>Mon, 22 Feb 2021 19:01 EST</pubDate>
</item>
<item>
<title>blessfrey in japanese </title>
<link>https://www.blessfrey.me/diary/entries//diary/entries/201029</link>
<description>Instead of hard-coding text, keep it in a spreadsheet instead. It's easier to organize, edit, and ... </description>
<pubDate>Mon, 22 Feb 2021 19:01 EST</pubDate>
</item>
</channel>
</rss>

@ -4,19 +4,19 @@
<br><br> <br><br>
<h1>chimchooree</h1> <br> <h1>chimchooree</h1> <br>
<h2>hello</h2> <br> <h2>hello</h2> <br>
I'm just a US-based indiedev who's learning to program through game development + web development. My hobbies include enjoy studying Japanese, translating isekai manga for others, and playing 90s/00s CRPGs + JRPGs. <br> I'm a US-based indiedev who's learning to program through game development + web development. My hobbies include enjoy studying Japanese, translating isekai manga for others, and playing 90s/00s CRPGs + JRPGs. <br>
<br> <br>
To practice different languages, I bounce among a few solo projects in Godot Engine, Java, and Python. My main project is a widely scoped ARPG dungeon crawler called Blessfrey, which I hope to release a demo for soon. <br> To practice different languages, I bounce among a few solo projects in Godot Engine, Java, and Python. My main project is a widely scoped ARPG dungeon crawler called Blessfrey. Hopefully there will be a demo out soon, so keep watching! <br>
<br> <br>
Feel free to say hello, especially if you're interested in gamedev, too. <br> Feel free to say hello, especially if you're interested in gamedev, too. <br>
<br> <br>
<h2>general + business contact</h2><br> <h2>general + business contact</h2><br>
<ul> <ul>
<li>chimchooree<span style="display: none;">OBFUSCATION</span>@mail.com</li> <li>chimchooree<span style="display: none;">OBFUSCATION</span>@mail.com</li>
<li>twitter: <a href="https://twitter.com/lilchimchooree" rel="nofollow">@lilchimchooree</a> </li> <li>twitter: <a href="https://twitter.com/lilchimchooree" rel="nofollow">@lilchimchooree</a> </li>
<li>flightrising: <a href="https://flightrising.com/main.php?p=lair&tab=userpage&id=525948">Aristene</a> </li> <li>flightrising: <a href="https://flightrising.com/main.php?p=lair&tab=userpage&id=525948">Aristene</a> </li>
</ul> </ul>
<br> <br>
<br><br><br><br> <br><br><br><br>
</div> </div>
<div class="footer-row"> </div> <div class="footer-row"> </div>

@ -73,7 +73,7 @@
<div class="textbox contact"> <div class="textbox contact">
<h2>Contact</h2> <h2>Contact</h2>
<br> <br>
Please message me on <a href="https://twitter.com/lilchimchooree" rel="nofollow">Twitter @lilchimchooree</a>. Please email me at chimchooree<span style="display: none;">OBFUSCATION</span>@mail.com or message me on <a href="https://twitter.com/lilchimchooree" rel="nofollow">Twitter @lilchimchooree</a>.
</div> </div>
<div class="textbox credits"> <div class="textbox credits">

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
% for i in items:
<item>
<title>{{i[0]}}</title>
<link>{{i[1]}}</link>
<description>{{i[2]}}</description>
<language>en-US</language>
<pubDate>{{i[3]}}</pubDate>
<dc:creator>chimchooree</dc:creator>
</item>
% end
</channel>
</rss>
Loading…
Cancel
Save