#tomorrow the refactoring will continue
Explore tagged Tumblr posts
Text
refactoring your own code is so embarrassing. who would ever write this trash pile of - oh...
#today's game dev work was just staring in horror#at the crimes against humanity i have committed#but there is something beautiful about facing your mistakes and fixing them#tomorrow the refactoring will continue#clean code who#anyway it's slightly less spaghetti now#progblr#codeblr#stemblr
31 notes
·
View notes
Text
Write One to Throw Away?
If you're in the software industry for long enough, you'll hear this advice eventually. There's an infamous Catch-22 to writing code:
You don't deeply understand the problem (or its solution space) until you've written a solution.
The first solution you write will have none of that hindsight to help you.
So it naturally shakes out that you have to write it at least one time before you can write it well, unless you're stricken with exceptional luck. And the minimum number of attempts you will need is two: one to throw away, and a second attempt to keep.
It's just math. It's just logic. Write one to throw away. It's got the world's easiest proof. You'd have to be some kind of idiot to argue with it!
Okay, hear me out...
As you work on bigger and older projects, you will continuously be confronted with a real-world reality: that requirements are an input that never stops changing. You can make the right tool for the job today, but the job will change tomorrow. Is your pride and joy still the right tool?
If you're like most developers, your first stage of grief will be denial. Surely, if we just anticipate all the futures that could possibly happen, we can write code that's ready to be extended in any possible direction later! We're basically wizards, after all - this feels like it should work.
So you try it. You briefly feel safe in the corrosive sandstorm of time. Your code feels future proof, right up until the future arrives with a demand you didn't anticipate, which is actually so much harder to write thanks to your premature abstractions. Welcome to the anger stage. The YAGNI acronym (you ain't gonna need it) finally registers in your brain for what it is - a bitter pill, hard-won but true.
But we're wizards! We bargain with our interpreters and parsers and borrow checkers. Surely we can make our software immortal with the right burnt offerings. We can use TDD! Oops, now our tests are their own giant maintenance burden locking us into inflexible implementation decisions. Static analysis and refactoring tooling! Huh, well that made life support easier, but couldn't fix fundamental problems of approach, architecture and design (many of which only came into existence when the requirements changed).
As the sun rises and sets on entire ISAs, the cold gloom eventually sets in. There is no such thing as immortal software. Even the software that appears immortal is usually a vortex of continuous human labor and editing. The Linux kernel is constantly dying by pieces and being reborn in equal or greater measure - it feels great to get a patch merged, but your name might not be in the git blame at all in 2 years time.
I want to talk about what happens when your head suddenly jumps up in astonished clarity and you finally accept and embrace that fact: holy shit, there is no immortal software!
Silicon is sand
... and we're in the mandala business, baby.
I advocate that you write every copy to be thrown away. Every single one. I'm not kidding.
Maybe it'll be good enough (read adequacy, not perfection) that you never end up needing to replace your code in practice. Maybe you'll replace it every couple years as your traffic scales. But the only sure thing in life is that your code will have an expiration date, and every choice you make in acknowledgement of that mortality will make your life better.
People are often hesitant to throw out working code because it represents years of accumulated knowledge in real-world use. You'd have to be a fool to waste that knowledge, right? Okay. Do your comments actually instruct the reader about these lessons? Does secondary documentation explain why decisions were made, not just what those decisions were? Are you linking to an issue tracker (that's still accessible to your team)? If you're not answering yes to these type of questions, you have no knowledge in your code. It is a black hole that consumed and irreparably transformed knowledge for ten years. It is one of the worst liabilities you could possibly have. Don't be proud of that ship! You'll have nowhere to go when it sinks, and you'll go down with it.
When you write code with the future rewriter - not merely maintainer - in mind, you'll find it doesn't need to be replaced as often. That sounds ironic, and it is, but it's also true. Your code will be educational enough for onboarding new people (who would rewrite what they don't understand anyways). It will document its own assumptions (so you can tell when you need a full rewrite, or just something partial that feels more like a modification). It will provide a more useful guiding light for component size than any "do one thing well" handwave. And when the day finally comes, when a rewrite is truly necessary, you'll have all the knowledge you need to do it. In the meantime, you've given yourself permission to shit out something sloppy that might never need replacing, but will teach you a lot about the problem domain.
This is independent of things like test suite methodology, but it does provide a useful seive for thinking about which tests you do and don't want. The right tests will improve your mobility! The wrong tests will set your feet in cement. "Does this make a rewrite easier?" is a very good, very concrete heuristic for telling the two apart.
Sorry for long-posting, btw. I used this space to work through some hazy ideas and sharpen them for myself, particularly because I'm looking at getting into language design and implementation in the near future. Maybe at some future date, I'll rewrite it shorter and clearer.
TL,DR:
Every LOC you write will probably eventually be disposed or replaced. Optimize for that, and achieve Zen.
17 notes
·
View notes
Text
Beta Update - 13/02
Few things to go over:
We have collected the kitten report lists and will push them to grow tomorrow. Any kits which were born before our fix a few days ago will not age up, and after the last age-up tomorrow we're not doing anymore manually! We suggest retiring them if they take up space and you don't want any perma-kits.
I will be off entirely tomorrow and through the weekend. I'll be back next week! And development will slow down the next two weeks as we've previously said we would be doing. One of our developers is taking a full time off, and while we'll continue pushing out things over the course of February, we'll not be as fast. A monthly update will still come out for February.
But this means no more nightly summaries for the rest of February. We'll still put out small updates, and periodic large announcements for things we push out.
Then we come back at the beginning of March with the daily summaries and big updates again!
Here is what we did today:
Manually aged up broken kittens born before our time fix, first round done
We pushed part one of the errand refactoring! Upon refreshes, the new generation of errands that drop copper and silver should start showing up slowly over the next few days.
Edited item modals (metas, item cards) to be more mobile friendly
Found the stubborn midwife freezing problem. We think it's gone for good.
Here is what we're working on tomorrow and through Monday:
Next age push
We're editing the errand UI to have visible reports of the item rewards (copper / silver, naming the items)
Fixing the breeding malfunctions with relationships that were reported
Have a good night everyone! I am going to get some sleep
#paw borough#pet site#virtual pet#indie game#petsite#pet sim#development update#pawborough#closed beta#beta
3 notes
·
View notes
Text
Over the years I have written a lot of code. A lot of that code I have sampled in my Gist repository. Some logic is simpler than others. Some took more refactoring than others. The code ranges from UI, desktop applications, web, firmware, and more. Feel free to explore the code, and if any of it is of use to you, feel free to copy, refactor or fork it. My contribution to a field that has amazed me since a kid. A field that evolves faster than none other. A field that drives the world today and tomorrow. A field that has, and will continue to change lives, and the greater world. A field that will bridge economic gaps and give opportunities to individuals and communities to build wealth and educate whereas without this field called computer science, they would have never had that opportunity. I’m happy to have just had the opportunity to play a small part in the evolution and share some of my life’s work with the world.
0 notes
Text
https://www.sifytechnologies.com/digital-services/app-modernization/
Transforming Digital Landscapes with Sify's App Modernization Services
In today’s fast-paced digital environment, staying competitive requires continuous evolution and adaptation. Businesses must leverage modern technologies to transform their legacy applications, enhance efficiency, and drive innovation. Sify Technologies, a pioneer in digital transformation, offers comprehensive App Modernization services designed to help enterprises stay ahead of the curve.
Understanding App Modernization
App Modernization is the process of updating and optimizing existing software applications to align with current business needs, technological advancements, and market trends. This involves refactoring, rearchitecting, and rehosting applications to ensure they are more scalable, secure, and maintainable.
Why Choose Sify for App Modernization?
Sify’s App Modernization services are built on a foundation of deep industry knowledge, technical expertise, and a customer-centric approach. Here’s why Sify stands out:
1. Comprehensive Assessment and Strategy
Sify begins by conducting a thorough assessment of your existing application landscape. This involves evaluating the current state of your applications, identifying pain points, and understanding your business goals. Based on this analysis, Sify crafts a tailored modernization strategy that aligns with your objectives and maximizes ROI.
2. Cutting-Edge Technologies
Leveraging the latest in cloud computing, microservices architecture, containerization, and DevOps practices, Sify ensures that your applications are not only modernized but also future-proofed. This integration of cutting-edge technologies enhances agility, scalability, and performance.
3. Seamless Migration and Integration
Sify’s team of experts excels in seamlessly migrating legacy applications to modern platforms with minimal disruption to your business operations. Whether it’s rehosting applications on the cloud or refactoring them into microservices, Sify ensures a smooth transition with robust integration capabilities.
4. Enhanced Security and Compliance
In an era where data breaches and cyber threats are rampant, ensuring the security of your applications is paramount. Sify incorporates advanced security measures and adheres to industry best practices and regulatory compliance standards, safeguarding your applications and data.
5. Optimized Performance and Cost Efficiency
By modernizing your applications, Sify helps you achieve optimized performance and cost efficiency. Modern applications are more resource-efficient, reducing operational costs and enhancing user experiences. Sify’s continuous monitoring and optimization services ensure your applications remain at peak performance.
Success Stories
Case Study: Modernizing a Leading Retailer’s E-commerce Platform
A leading retailer approached Sify to modernize their outdated e-commerce platform. The existing system was plagued with performance issues and could not scale to meet the growing demand. Sify conducted a comprehensive assessment and migrated the platform to a cloud-based microservices architecture. The result was a highly scalable, secure, and efficient e-commerce platform that significantly improved the customer experience and boosted sales.
Partner with Sify for Your App Modernization Journey
In an age where technology is the driving force behind business success, partnering with a reliable and experienced provider is crucial. Sify’s App Modernization services offer a transformative approach to revitalizing your legacy applications, ensuring they meet today’s demands and are ready for tomorrow’s challenges.
By choosing Sify, you gain a trusted partner dedicated to your digital transformation journey. With a proven track record of successful projects and a commitment to innovation, Sify empowers businesses to thrive in the digital era.
App Modernization is not just about updating technology; it’s about redefining how your business operates and delivers value. Sify Technologies is at the forefront of this transformation, offering unparalleled expertise and solutions to help you modernize your applications effectively. Embrace the future with Sify’s App Modernization services and unlock new possibilities for your business.
For more information on how Sify can help modernize your applications, visit our website or contact our experts today.
0 notes
Text
A Big Change, and a Quick Status Update
Hey everyone!
I’ve been hard at work on the demo over the past several months, and I’m happy to say that it’s nearly complete in an unpolished beta state -- currently, all that I have left to do is implement sausage leveling and polish up the geometry and effects...or at least, that’s what was left until a couple days ago.
Something I’ve noticed recently is that a lot of people seem to be mixed up on the purpose and the goals the game, mostly due to my own mistakes explaining it. Some people think that I’m still working on the Dark Souls-Platformer Hybrid, named The Fantabulous Game, and others think that Le Fantabulous Game v1.0 is going to be a proper revisit of the egglike genre. And, on top of this, there are people who dislike the (quite frankly, cringe-inducing) use of the word “Le” in the title. This is something I hoped would be endearing to fans of the original v0.9, but even Vinny himself hid the word “Le” when he showed the trailer, accidentally hiding the fact that the game’s going to have a Kickstarter. (As a sidenote -- I’m so so grateful that he mentioned it at all, let alone showed his viewers the trailer or mentioned it twice, especially since it’s brought this issue to light.)
So, long story short: I’m finding that the name of Le Fantabulous Game is confusing to people; at best, it causes people to mistake LFG for TFG...and at worst, results in people treating the game like a free egglike, or even worse, as shovelware and trash for those less interested in the genre. I’ve been pouring my heart and soul into making a real game, and the title has seemingly been holding it back. So, without further ado, I’d like to announce that Le Fantabulous Game is being renamed. The new title?
Fantaria: The Quest for Sausage
I know some people are going to be upset about this change, but this is something I need to do both for my own continued passion for the project, and for its ability to draw in new fans who haven’t heard of the original -- I certainly don’t want them looking up “Le Fantabulous Game” and finding the video of v0.8 and thinking that’s all it is, after all.
So, to officially clear up the confusion: Fantaria is an FPS/Collectathon Platformer hybrid, named after the continent where the game takes place. You play as a mysterious alien who fell from the sky in a capsule-esque egg, who the Spherefriends dub as Capboy. Capboy quickly gets roped into the surreal politics and supernatural threats of Fantaria, and slowly begins to unravel the secret power of the Sausages which the denizens of the island find so alluring. The gameplay’s inspired by games like DOOM16 and Banjo Kazooie, with my own unique gameplay elements to boot.
So with that out of the way, I’d like to give you guys the lowdown of what’s done for the demo:
Fightyplace-3, “Mount Sphonk Summit,” has a complete structure. This level is what will comprise the majority of the demo, and features five separate enemy types along with a hybrid of platforming and combat gameplay.
FP-3 still needs some polishing both visually and audibly.
The boss of FP-3, who I’ll be keeping under wraps, is nearly complete and simply needs some slight polishing and a death animation. Mechanically, it’s 100% complete, with two phases.
Four weapons (including melee), each with a primary and secondary fire
Three unique abilities:
A tattle, where you get a small blurb about the enemy you’re looking at based on the spherefriend you have equipped
A slipdash, letting Capboy become invulnerable to all damage while dodging in the currently held direction
Mind control, allowing Capboy to seize control over a stunned enemy. Note that this ability will not be present in the demo due to not quite being up to the stability standard I’d like it to be, and will instead be replaced with a new ability I’ll discuss below.
All of this content is being consistently tested for quality/enjoyability as I make it, so this should all be much more stable and fair than things in v0.9 were.
And, as for what’s left to do beyond the mentioned polishing:
Implement Sausage Leveling, where Capboy can spend collected sausages in a menu to upgrade his weapons and abilities
Implement corresponding upgrades for every ability and weapon -- note that skill trees will be very limited in the demo compared to the final version, due to only having one level’s worth of sausages, and will be more potent and generalized.
SFX and death anims for Vineborn enemies
Create skyboxes for FP-3 and FP-Boss
Write up kickstarter info
Record Q&A video -- this has been so delayed because my overhead light went out in my apartment, so I’ve been waiting for a day that I have time to record and have the sun lighting things up well enough. The video’s scripted, and based on the weather it can be out hopefully tomorrow?
So, home stretch! Due to this name change and general refactoring, there is a decent chance that the Kickstarter will be first week of May instead of April, but I’m sure you guys can handle waiting just a little bit longer. If you’d like to join the server and talk about any of this, you can check it out here: https://discord.gg/Y4R8d3K
Thanks for reading, gang, and I’ll talk to you guys again soon! -Fantabuloso
40 notes
·
View notes
Link
patch notes for the update tomorrow are out. copypaste:
Highlights
Guild Heraldry - Guild features continue to expand with the addition of Guild Heraldry! Each guild can create their own unique emblem to represent them throughout the game. Join your most trusted allies and make your mark on the galaxy!
Preview Window Refactor - The in-game Preview Window has been dramatically improved - weapon, armor, and mount previews are all better than ever before. Plus, now you can also check out emotes, moods, and rest-and-recharge abilities!
The Double XP Event Returns! – Gain double Experience, Command Experience, and more from April 16th through April 23rd.
General
Guild Experience earned from Conquests has been increased by 50% (3 GXP per Conquest point, up from 2).
The pop-up text when auto-completing the story to reach Ossus has been updated to be more clear on how it impacts the player.
Players who used the story auto-complete to reach Ossus can once again access the Troop Deployment Console and Daily Missions on Iokath.
Corrected a number of environmental issues inside the Hive of the Mountain Queen.
Incorrect Legacy names will no longer appear in the Guild Window in certain situations.
Using an elevator in a Star Fortress will no longer unsummon a players active Companion.
Classes +Combat
Trooper
Vanguard
The Parallactic Combat Stim will now have a visible buff when triggered.
Items + Economy
Hair will no longer clip through a variety of Tier helmets which players can purchase on Ossus.
The Armored Interrogator Armor Set now displays the correct preview image in the item stash.
To ensure players get the appropriate gear for their desired playstyle, it is no longer possible to open an Artifact Lockbox without an active Discipline.
Updated the Crested Orokeet’s preview art to properly reflect the appearance of the pet.
The Republic Starfighter and PvP Decoration Vendor Captain Nitch has long been suspected of treasonous activities. It was recently discovered that he was incorrectly peddling the Imperial Generator Node Decoration, this grave error has been corrected. Captain Nitch now sells the Republic Generator Node Decoration, as intended.
The Tribal Champion’s Blade is now flagged as a vibrosword as intended (was previously set as a lightsaber).
The Entropy Lightsaber will now holster on the player’s hip as intended.
Updated the Collection art for the Advanced Frost Green Crystals to be consistent with other Color Crystals.
Wearing the Sinister Warrior’s Belt with certain helmets will no longer stretch the player’s character in very… sinister ways.
The Jedi Master Monument Stronghold Decoration is no longer floating.
The following items have had their weapon categories corrected:
Exarch’s Rifle MK-1
Exarch’s Rifle MK-2
Exarch’s Polesaber MK-1
Exarch’s Polesaber MK-2
Missions + NPCs
Players will now gain Influence with Treek during her Companion Mission conversations as intended.
Corrected missing text for the [Weekly] Masterwork Data Crystal Mission.
SCORPIO can now be summoned from the Companion Locator Terminal after completing Ossus.
Sith Inquisitors who sided with Zash will no longer receive Khem Val’s Alliance after completing the Ossus storyline.
Darth Marr’s Lightsaber is once again visible in combat during KOTFE Chapter I “The Hunt”.
The Ossus Daily Mission [DAILY] Enkindled Knowledge now provides credit towards the Mission [DAILY] Patrol: Ossus as intended.
The Probe Droid Companion now has sound effects when shooting their blaster.
During the Mission [DAILY] The Science of Darkness, NPCs will now correctly reduce in size when the Adrenal Reaction debuff wears off.
Kira Carsen will no longer appear twice during the cutscene for the Jedi Knight Class Mission Uphrades.
We unfortunately had to request that Doc reduce his rather long, elaborate, and completely humble title from the Companion and Contacts window so that it would fit properly.
Corrected an issue where completing the Sith Warrior Class Mission “Strong Arm” would not grant the next Mission in some situations.
Updated the map Mission marker for the Bounty Hunter Class Mission “Some People Just Need Killing” to be more accurate.
Vector’s eyes now change during his romance cutscene as intended.
Warzones
General
Season 8 and 9 Ranked Tokens have been converted into credits.
-
i mean. it only took them, what, a year to fix companions in star fortresses?
7 notes
·
View notes
Text
Application Modernization Trends to Watch in 2022
Corporate organizations have seen a boost in digital transformation as the pandemic has subsided. Legacy app modernization services provide business entities with the necessary competencies and abilities to respond to various dynamic developments. Software technologies are deployed and improved on a massive scale. The app modernization plan is used by corporate organizations to ensure business growth and continuity in the dynamic market.
Existing systems and app modernization are fantastic options for leveraging existing capital and avoiding unnecessary technological investments.
Application modernization is the activity of updating obsolete software for the latest computing approaches, including the latest frameworks, languages, and infrastructure platforms. Legacy app modernization and legacy modernization are terms used to describe this type of operation.
It contributes to the enhancement of structural integrity, safety, and efficiency. The legacy modernization increases the company's enterprise apps' lifespan. You can get information about application modernization trends in this article:
Application Modernization Trends
Businesses are subjected to a variety of external and internal pressures. During the COVID-19 crisis, it held up nicely. Since the supply chain will cause business turmoil, commercial businesses have seen a rapid loss of revenue. Regardless of the industry, businesses are losing patience with the legacy integration service's unfavorable business consequences and problems. The following are a few examples of application modernization trends:
Legacy apps stifle development.
The absence of integration can be costly.
Onboarding is thought to be more relevant.
The demands for innovative technology are continually increasing.
Assists you in developing customized services and features.
A wide range of businesses claims to generate software, which is a must for today's requirements. After the pandemic, change is the only constant. The app that works today may not work tomorrow. The most recent updates, releases, and patches may cause problems. Furthermore, it is difficult to meet shifting customer demands during a downturn in the economy.
Developing modern apps allows businesses to establish cutting-edge services and features that are in line with their long-term goals. Furthermore, such services and features are custom-built for the company, ensuring that the legacy software adds value to the company.
Patterns of application modernization
The following are examples of common modernization patterns:
Lift and Shift
Lift and shift, also known as rehosting, is an essential element of software development that involves relocating an existing app to a newly built infrastructure from a legacy environment. This pattern will lead you to the app, with no or little changes to the underlying architecture and code. Though it is the least time-consuming approach, it is not always the best, depending on the app.
Refactoring
Another term for restructuring or rewriting is rewriting. This method of app modernization entails adopting the legacy program, then retooling severe underlying code flaws so that it can run in the newer environment. Aside from the most recent codebase restructuring, this strategy entails rewriting the code. It is up to the development team to decide how to decouple the monolithic program into smaller sections. To maximize the benefits of cloud-native infrastructure, they should make proper use of microservices.
Replatforming
The platform can be viewed from the perspective of a midway point. It also serves as a middle ground between the refactoring, lifts, and shift strategies. It does not necessitate any significant changes to the design or code. It does, however, include recent changes that enable the legacy program to take advantage of the upcoming cloud platform, such as the replacement and modification of the app's back-end outbase.
App modernization technologies that are essential
There is a large array of overlapping technologies that are critical to app modernization:
Containers:
They're known as the cloud-centric method for deploying, packing, and running workloads and apps. Containerization has a wide range of advantages, including operational efficiency, portability, and scalability. It has a reputation for being a good fit for cloud architecture and a variety of hybrid and multi-cloud scenarios.
Cloud Computing
It is the process of migrating traditional software to run in the most recent cloud environments. Private clouds, public cloud platforms, and hybrid clouds are all included.
Microservices
Microservices allow you to decouple individual components into distinct and smaller codebases, referred to as monolithic development, rather than building and operating the app as a single codebase. You can then separate a wide range of components into separate and smaller bits, allowing you to operate, update, and deploy them independently.
Automation and orchestration
Software development orchestration aids in the automation of various operational processes associated with various containers, such as networking, scaling, and deployment. Automation is considered a crucial technology and principle. It ensures that security, operations, and development teams can manage the most recent apps as they scale. Modernizing legacy applications is critical to the success of the digital transformation. Businesses have a history of modernizing in a variety of ways. Legacy app modernization solutions are effective in increasing revenue by recognizing possibilities and identifying concerns.
There are numerous reasons why App Modernization is advised. For starters, it allows apps to work faster, resulting in improved performance. Furthermore, it provides the opportunity for personnel to seek improved cloud technology, which aids in efficiently serving clients. As a result, it's useful for discovering new business opportunities. Modernization is the first step in identifying new investment opportunities, such as using AI and different machine learning approaches and transferring data to a data lake. With cloud-native containerization and architecture adoption, you can design and deploy the most up-to-date services and apps.
How can Cambay Consulting help you?
We strive to be our customers' most valuable partner by expertly guiding them to the cloud and providing ongoing support. Cambay Consulting, a Microsoft Gold Partner offers "Work from Home" offerings to customers for them to quickly and efficiently deploy work from home tools, solutions, and best practices to mitigate downtime, ensure business continuity, and improve employee experience and productivity.
What role does Cambay Consulting play?
We achieve powerful results and outcomes that improve our clients ' businesses through our talented people, innovative culture, and technical and business expertise. We help them compete and succeed in today's digital world. We assist customers in achieving their digital transformation goals and objectives by providing services based on Microsoft technology, such as Managed Delivery, Project, and Change Management.
0 notes
Text
Wednesday, July 25, 2018
post #198
main points:
- refactoring PR unit test
- team meeting
- lunch at my desk
- get mail for intern package
- all hands meeting
- refactoring PR unit test issues
- get started icon update PR
- get started new row PR
- dinner
- new row PR until 10pm
- chill at home
today i:
- woke up at 8:30am. damien tried to catch the bus but it was out of order. so we ubered together to work
got into work and bumped into dan and harvy. so we decided to grab breakfast together with all four of us. they had some bacon and my left side of my mouth was kind of sensitive to it. i really need to get my cavity fillings checked out when i get back to boston.. i already can’t eat with my right side. if i can’t eat with my left side idk what i’m gonna do
- got right to work on the unit test for the refactoring PR. i was having some issues with it and it was because i was doing the wrong comparison. i tried to do it a different way and then finally got my expected comparison.. but then i was having some closing string symbol (”) issue. i thought that was odd cause i clearly had a closing string symbol. i also had to see why the bell wasn’t showing up on my project’s page. for some reason, after repulling, it showed up miraculously
- some interns started swinging by my desk asking about the intern package. i still hadn’t gotten it yet so asked chip. he said it should’ve been delivered. i went downstairs to the mail room and the people there were actually just about to message me. turns out there’s two people with my same first and last name so they were having trouble figuring out who the package was for
- brought the box upstairs but there were only 15 packages... and there were definitely a lot more interns... i messaged chip and he was also confused cause there should’ve been a second box
- went to a weekly team sync up meeting from 11-12pm
- grabbed lunch as takeout and brought it back up to my desk to continue the unit test thing, trying to figure out why it was failing. i also had to update some other tests as well. this CL was getting massive
got the second box around 1:50pm, cause i decided to go check again to see if they had a second box. turns out they did. and it was much more full than the first one
- went to an all hands meeting in the main auditorium area thing from 2-3pm. i worked on starting the icon PR in the meantime since i couldn’t figure out this unit test issue
- meant to grab boba with dan at around 1pm but he got caught up helping his interns. so we went at 3pm. but they were out of boba, so he got a coffee and i got some yogurt. we just chilled and talked about how the summer is going for me. i appreciate that he cares and wanted to ask me how things were going. and then gave me some suggestions to mock interview/offered to practice with me, which was really nice
- went back to my desk around 3:30pm. worked on the icon PR for a bit until i was confident the code was working. then went back to solving the unit test issue.
- also started another PR for adding a new row. i think i worked straight from 3:30pm - 7pm ish. then went downstairs to grab dinner. brought it back up to eat and continue working. i got the icon PR to a working point (but with a hacky solution i.e. using a white version of an icon to make it “disappear”). i couldn’t test the icon change until i finished the refactoring code. so then i worked on the unit test, trying so many different variations of closing the string. i looked up other examples and saw people use \\ (since there were byte values) instead of \. i guess this must’ve been the correct way to escape characters. i tried it and then that finally worked. finally. i wasted a good hour and a half trying to figure out this issue.
around 8pm played melee with john for a bit until like 8:30pm
i decided to stay and work on getting the new row to show up. but then i realized that adding this new row would also have to update the way we do the previous 3 rows, since they’re all tied together logically. so i spent a bunch of time rewriting the code to fit that logic
eventually i finished around 10pm. whew. so tired. but i should be in a good spot to wrap that up tomorrow morning. i submitted my refactoring component PR. i enjoyed doing the work, though i was a bit mentally tired. this was the latest i stayed at the office (not playing video games). it was mostly moving stuff around/rewriting logic, but i felt like i could at least make progress and do it on my own, which is different from writing client side iOS code
so tomorrow i’ll verify the icon PR, update remaining new row PR code, and then probably work on a client side handler for the new proposed logic from my mentor
i was supposed to have a call with my conversion recruiter today but she suddenly rescheduled it to tomorrow morning so last minute
shrug
- potatoed at home for about an hour from 10:30pm-11:30pm.
- took a shower/brushed my teeth and stuff
okay that’s it. my brain is dead
it’s 12:29am. good night
oh yeah i watched a really cool informative video from vox about hong kong and china
https://www.youtube.com/watch?v=MQyxG4vTyZ8
2 notes
·
View notes
Text
Earth From Another Sun Daily Development Update: Monday 6/28/2021
Greetings! Anthony and Freeman here. We are here to deliver the freshest update on "what the Earth From Another Sun team worked on", for 6/28/2021.
We are publishing these updates because we aim to be the most transparent dev team ever, and we are willing to share as much as possible so you can get an accurate picture of the development progress of Earth From Another Sun.
If there's anything else you'd like to know about the development progress, process, vision, or anything else, let us know! (here or on https://discord.gg/kDVG6qh)
Alright, here's today's dev update:
Art:
Continued building the flagship bridge, in particular the entertainment area.
(img)
(img)
Added several new animations for the spider combat unit.
(img)
Design:
Discussed AI spawning logic, and attribute tables.
Discussed the requirements of the save/load system.
Working on the design of the Quest system.
Working on the design of the Adventure Events creation tool.
Completed the design of the room list UI.
(img)
Working on the inside room UI.
(img)
Programming:
Working on improving the player's animation state machine.
Added sfx to some UI.
Working on the save/load system.
Working on the player equipment UIs.
Improved the event treasures feature.
Working on implementing merchant fleets.
Working on code refactoring (UUID package as struct).
Added interfaces for the player equipment system.
Working on the procedural creation of NPCs.
QA & DevOps:
QA testing, and writing a testing report.
Verifying A56 tasks.
Collect the organize player feedback.
So that's it for today! See you tomorrow!
Earth From Another Sun has a grand vision, and that is to one day become the greatest open-world sandbox game ever made, a world with an incredible amount of content for you to explore.
We believe if we work hard, day in, day out, and keep at it endlessly, then that vision will become reality.
Let's keep going.
0 notes
Text
Version 310
youtube
windows
zip
exe
os x
app
tar.gz
linux
tar.gz
source
tar.gz
I had a productive week. A bunch of stuff is fixed, and I finished a first version of multi-file url downloading.
multi-file support
A limitation of the old download system is that it always assumed a single 'post URL' could only ever produce a single file. This week, I have added full support for multi-files-per-post-URL to the new downloader. If a new parser generates multiple 'downloadable' URLs, the file import queue will generate and insert new download objects for each. Tags and associable URLs should all be passed along to the children as appropriate.
As a result, I can finally roll out support for several sites that provide files in this way. I've updated the inkbunny post parser, and added twitter tweet and artstation post parsers, so all these should now be drag-and-droppable onto the client. The twitter parser only supports images--no videos yet. The inkbunny parser may put its multi-files slightly out of order, and in one of my tests it pulled the artist profile picture as well, so it may need some tweaking. IB have a proper API, but it requires some login stuff, so I will look at that again when I have the new login system done.
And of course I have added a pixiv manga parser, which has been highly requested for a long time. This was fairly complicated, but I think I got all the referral URLs and tags lined up correct. It can even add 1-indexed page tags. Unfortunately, pixiv just changed my test login to the new (currently broken) JSON/javascript layout just today, as I did final testing. If it turns out pixiv have switched everyone over to the broken layout on the very day I finally roll out manga support, I think my head is going to explode, but even if so, I am confident the javascript layout is parsable--it'll just take a bit more work. I expect to have a fix for all pixiv users for v311 if another user doesn't post one sooner.
This multi-file parsing is a first version. There may be bugs, so please let me know. I also don't really like how the initial post URLs' file import objects get counted as 'successful' like a regular file, so I may make a new 'successfully parsed' type to distinguish them a bit and alter the file progress counts appropriately.
misc
The new 'x% in' video thumbnail generation works better and fails better now, including some better workflow and error-reporting when regen is manually started by the user. If you had some videos that failed to import or regen last week, please try them again and let me know if you still have problems.
The multiple watcher now has a 'check now' button.
I added a semi-crazy prototype checkbox to options->gui that puts all your page tabs on the left. It needs a restart to kick in. Test it at your own risk.
The new download system now informs the new network engine of file limits in your 'file import options'! So, if you say 'don't get gifs bitter than 32MB', and the server clearly identifies a newly started download as a gif with size 50MB, the download will be abandoned and a veto/ignored status set immediately! It also works with the regular min/max filesize as appropriate. Let me know if it goes wrong!
I cleaned up some file repository thumbnail sync and display code all around.
github
Github got bought by Microsoft, so I am considering migrating somewhere else. I only use Github as a file/code host and the workflow of syncing there is easy, so I may or may not go, or may just put it off and see what happens during the transition. I am interested in your thoughts on the whole deal and what you think of the alternatives.
full list
updated the inkbunny file page url class to acknowledge that inbunny pages can have multiple files
updated the inkbunny file page parser to handle multiple file urls (although they may be out of order and possibly sometimes include the artist profile image--this was not super easy)
added a parser for twitter tweets (only images supported atm, but it can handle multiple!) (hence tweet drag and drop now works!)
updated the artstation file page url class to redirect to a new api url class
wrote an artstation file page parser that also handles multiple file urls
updated/added pixiv file page, manga page, and mange_big url classes
updated pixiv file page parsers to be ok with manga links
wrote parsers for pixiv manga and manga_big pages to fetch manga files (with page tags)!
file import objects can now create semi-duplicate children for multi-file post urls and insert them just after themselves in the file import queue.
file import objects can now receive and remember referral urls. this referral url is associated with the file if appropriate. the watcher and simple downloader now uses this in addition to the multi-file post system
jumbled around some parameters and merged the two new file import url commands (import 'file' vs import 'post') into one single simple 'work on this url, thanks' call that is now used across the program
the parsing system's 'content parser' no longer fetches file urls and post urls, but 'download urls' and 'source urls'. this helps some pipeline logic and also lets post urls be download urls
when file import objects parse post urls as the urls to download, it now creates 1-n new import objects, just like if multiple file urls.
improved some file import object file association code
the new parsing system will de-dupe parsed urls
refactored the 'seed' code, which handles all basic file import objects, to the new ClientImportSeeds.py
added a new string transformation type, 'integer addition', for shifting page number tags up and down
fixed thumbnail generation for some videos that failed to do the new x%-in generation--it reverts more reliably just to the old frame 0 method
file reparsing popup now has a stop button
fixed an issue where extremely thin or wide (ratio > 200:1) images would not generate a full-size or resized thumbnail
the file reparsing/re-thumbnailing now reports errors better (including with full path) and does not abandon the larger job as it works
misc thumbnail generation code improvements
improved some thumbnail and file regeneration/moving code when the existing file has read-only status
the multiple watcher now has a 'check now' button
added a checkbox to options->gui that will put new notebook page tabs on the left
for all file download network jobs working in the new download system, the file import options for min size, max size, and max size (gifs) are now applied _during the download_! if the server tells the client the exact file size in the response headers, it will test max and min size before the content is actually downloaded--otherwise, it will test the max size as it downloads. if the server clearly says the file is a gif, the max gif size rules will also be tested in the same way
cleaned up some bandwidth announcement code--now, if bandwidth is due in less time than override time, that will now correctly be the status text
the bandwidth status no longer says 'in in' typo
fixed up some tag repair code from last week
the 'print garbage' debug function now dumps a whole bunch more data to the log
the thumbnail cache should now be a bit more stoic about missing repository thumbnails--it should now just present the hydrus default backup without error popup spam
the repository thumbnail sync will now get as thumbs in blocks as high as 10k at a time, rather than the old 100
hydrus network requests no longer generate web domain network contexts (and so won't have a default one-request-per-second bandwidth limit and should stream through thumbnails a bit faster)
hydrus network services are now willing to wait longer for bandwidth, so big thumbnail queues should keep working even if other bottlenecks pause them for a bit
hydrus network services will no longer sometimes have double-sync popups if synced from the advanced 'sync now' button in review services
changed the default global 'stop-accidents' bandwidth rule of 120rqs per minute to 512MB per minute. this only affects new users, but users trying to sync to large file repos might like to make a similar change manually
doing giant full file delete (i.e. purge from trash) jobs should now be a bit gentler on the gui
improved how the client deletes paths, clarifying in the code when and when not to allow recycle (usually disabled for thumb disposal)
switched the hacky text widgets on the popup system to a newer object. seems to still render ok, so lets see if it fixes some unusual layout issues some users have seen
if the temp folder cannot be created on boot, the client will continue anyway
fixed some url-domain text handling in db storage that was also breaking v309 update for some users
fixed some additional domain generation error handling at the db level
the list of url classes in the system:url panel is now the list of all url classes that are considered associable (before, it was file and post urls)
if a url class now api-links to itself or otherwise forms a loop with n other api url classes, the client will now throw an error (rather than lock up in an infinite loop!)
in the parsing ui, tag parse test results are now cleaned before being displayed
fixed misc url matching error reporting bug
when consulting the current file limit, the gallery page downloader will now try, when it has that number, to consult the total number of urls found it the current search (old behaviour is to only consult the number of _new_ urls, which lead to some bad edge-case workflows)
misc refactoring
next week
I am going to take a light week next week so I can shitpost E3. I will try and keep up with messages, but I'll only do a little fixing work. I will get back to regular schedule on the 16th, which means v311 will be on the 20th. I will make a 'No Release Tomorrow!' post on the 12th.
I am a little ill and completely exhausted, so an easy week is coming at a great time.
I am still really enjoying making hydrus. Thank you for all your continued support!
2 notes
·
View notes
Text
devlog: 12/28/2020
Today I continued the implementation for the second enemy for the second stage, a frog that periodically jumps in the player direction.
I could have made it really quick If I just used a rigid body and applied impulses for the frog to jump. But I went and just re-implemented with a kinematic body the same kind of functionality that already exists in a rigid body.
Why did I do that? Just to waste time?
Actually no. I do wish to some time in the future do refactoring in the character prefab and controller script. And one of the things I have to isolate is the physics controlling logic. Implementing this from scratch in this enemy was an excuse to already implement a clean kinematic body movement logic. In fact, tomorrow I intend to separate this logic into an exclusive component so that I can use it in other enemies and hopefully on the character.
So, If you're interested, check out the stream timelapse (the embedded videos bellow won't show on tumbler dashboard, only on the blog view):
https://www.youtube.com/watch?v=sz_P73xxR4M
youtube
Also check out the livestream itself, both on youtube and twitch. Since I had to reboot in the middle of the stream, it also got cut in half, unfortunately. But fortunately, youtube was able to maintain the stream intact with the reboot.
https://www.youtube.com/watch?v=aJhVe92xvH8
https://www.twitch.tv/videos/852599842
0 notes
Text
Welp, wanted to get to transforms and get the triforce to spin, but wound up refactoring a ton of the main engine code to be more straightforward, and then got stuck trying and failing to get the scene to render correctly after the window is resized. Will continue at it tomorrow, hopefully!
For a while now I've been looking into the Homeworld 1 source code (namely the HomeworldSDL port), and I've been played around with rewriting it in C++ to make a sort of OpenHomeworld project for fun. Eventually I'd love to be able to make that and then extend it into it's own general game engine, though that's a bit of a lofty goal at this point
3 notes
·
View notes
Text
Transforming Digital Landscapes with Sify's App Modernization Services
In today’s fast-paced digital environment, staying competitive requires continuous evolution and adaptation. Businesses must leverage modern technologies to transform their legacy applications, enhance efficiency, and drive innovation. Sify Technologies, a pioneer in digital transformation, offers comprehensive App Modernization services designed to help enterprises stay ahead of the curve.
Understanding App Modernization
App Modernization is the process of updating and optimizing existing software applications to align with current business needs, technological advancements, and market trends. This involves refactoring, rearchitecting, and rehosting applications to ensure they are more scalable, secure, and maintainable.
Why Choose Sify for App Modernization?
Sify’s App Modernization services are built on a foundation of deep industry knowledge, technical expertise, and a customer-centric approach. Here’s why Sify stands out:
1. Comprehensive Assessment and Strategy
Sify begins by conducting a thorough assessment of your existing application landscape. This involves evaluating the current state of your applications, identifying pain points, and understanding your business goals. Based on this analysis, Sify crafts a tailored modernization strategy that aligns with your objectives and maximizes ROI.
2. Cutting-Edge Technologies
Leveraging the latest in cloud computing, microservices architecture, containerization, and DevOps practices, Sify ensures that your applications are not only modernized but also future-proofed. This integration of cutting-edge technologies enhances agility, scalability, and performance.
3. Seamless Migration and Integration
Sify’s team of experts excels in seamlessly migrating legacy applications to modern platforms with minimal disruption to your business operations. Whether it’s rehosting applications on the cloud or refactoring them into microservices, Sify ensures a smooth transition with robust integration capabilities.
4. Enhanced Security and Compliance
In an era where data breaches and cyber threats are rampant, ensuring the security of your applications is paramount. Sify incorporates advanced security measures and adheres to industry best practices and regulatory compliance standards, safeguarding your applications and data.
5. Optimized Performance and Cost Efficiency
By modernizing your applications, Sify helps you achieve optimized performance and cost efficiency. Modern applications are more resource-efficient, reducing operational costs and enhancing user experiences. Sify’s continuous monitoring and optimization services ensure your applications remain at peak performance.
Success Stories
Case Study: Modernizing a Leading Retailer’s E-commerce Platform
A leading retailer approached Sify to modernize their outdated e-commerce platform. The existing system was plagued with performance issues and could not scale to meet the growing demand. Sify conducted a comprehensive assessment and migrated the platform to a cloud-based microservices architecture. The result was a highly scalable, secure, and efficient e-commerce platform that significantly improved the customer experience and boosted sales.
Partner with Sify for Your App Modernization Journey
In an age where technology is the driving force behind business success, partnering with a reliable and experienced provider is crucial. Sify’s App Modernization services offer a transformative approach to revitalizing your legacy applications, ensuring they meet today’s demands and are ready for tomorrow’s challenges.
By choosing Sify, you gain a trusted partner dedicated to your digital transformation journey. With a proven track record of successful projects and a commitment to innovation, Sify empowers businesses to thrive in the digital era.
App Modernization is not just about updating technology; it’s about redefining how your business operates and delivers value. Sify Technologies is at the forefront of this transformation, offering unparalleled expertise and solutions to help you modernize your applications effectively. Embrace the future with Sify’s App Modernization services and unlock new possibilities for your business.
For more information on how Sify can help modernize your applications, visit our website or contact our experts today.
0 notes
Text
10 pillars of clean code
We are writing codes every day and as a result our code base grows and grows. Every day we write a code which can be clean and help to write clean code tomorrow too. On the other hand, we can write a code that will become a pain and become harder and harder to maintain it. So, what can we do to keep our code clean, flexible and easy to maintain? I’m coding since 2005 and during this period I wrote some pillars of clean code for me and today want to share them with you.
Don’t hurry When you rush, the result is a non-working, unoptimal or a duplicant code. The best case scenario can be a working code which will be a source of issues later. Be patient, keep calm and code clear.
OOP Write object oriented code. Do not hesitate to create as much modules/classes as needed for clear and clean OOP code. Decompose things and keep each of them responsible for one thing.
Testing Do not miss to write automated tests for your code. Write unit, integration and UI tests. This will help you to find broken the code as soon as possible. Also, you can do continuous integration easily. More tests less bugs in the future, so write tests!!!
Flexible Code should be flexible. You should write a code which can be easily modified or replaced later, without touching tons of files. Also, a flexible code allows you to replace some components and keep whole system work fine.
Keep it simple Keep calm and write simple codes. There is no need to write 50 lines of codes to calculate sum of tree variables. Think as much as you need but code once, code clear, code short. Remember as much you type as much you get issues, as much you increase untested and uncovered code.
Think how it will be used When implementing new classes and methods think how they will be used. Usage shows interface. Try to look at your interface from user viewpoint. At that time, you will see how to keep them simple and easy to use.
Think how it will be extended Think how your code will be extended tomorrow. Try to keep them flexible. Use design patterns.
Solve problems when they appear - no code for 2100 If you are fixing an issue, just fix an issue. Do not think about unbelievable cases and do not write 500 lines of unused code just because someday someone somewhere maybe will use it. There is no need to spend time on things which will never happen. Do what you need to do now. If you will keep things flexible, simple and extendable it will be easy to make changes later.
Don’t touch what you don’t need If you are fixing issue fix issue, do not start touch other files and codes. In that case, most of the time you will produce new issues, so do what you should do and not make issue fix something like refactor.
One commit one fix One commit should have one issue fix, one task implementation. When you do one commit for bunch of issues it will be difficult later identify which code broke something working, it will be difficult to revert something. If you are integrating some library do one commit for it. Then start use it and do other commits but do not commit everything once.
Sure, there are other things which are important too but in my opinion those 10 pillars are the most common and following this rules will cover other not mentioned things.
0 notes
Text
week 5 day 3
this has already been such a successful week and i finally feel i’m getting the hang of rc and how to get the most out of it. some combination of learn & teach, be generous w your time, work with others to allow you to think more deeply about your problems.
monday & tuesday were a day of extensive learning and diving deeper into what it means to build embedded systems. after a good deal of confusion and head scratching on monday i paired with an experienced batchmate on improving my Makefiles and working to cross-compile Lua for the arm cortex. a number of tangents came out of this work and it was a fantastic project to pair with.
i learnt a great deal about how the compiler operates – creating object files (and only when they’ve changed if you write a good make file!), and then linking them together (also with shared libraries *.a or *.so {dynamic/static}). the key to the lua compilation issue was that the linker wasn’t getting the -arch flag. while the sources were being compiled for arm, the linker was linking to the x86 libc and libm libraries, causing an architecture mismatch. i’d kind of caught this before and updated my CFLAGS correctly, but due to not understanding where the linker was operating, i had failed to set the flags correctly. we reorganized the Makefile to have linker flags on a separate line & to more explicitly say where the linking was happening.
onward- i was super excited to get Lua sending me an error message, and called it a day when i had to go attend some work details.
today i spent the first half of the day pairing, before getting back to this problem. the conclusion though, is that i now have a working REPL that sends a string to Lua which runs the string as a script, then returns a string to represent the output which is printed & saved in a history array. this felt like a massive milestone to have the interpreter successfully parse a string, then run it, and return a meaningful value. i spent a good chunk of time refactoring the EVAL function and abstracted the history display update to its own function.
now the final step to having a meaningful REPL is to get usb-keyboard / hid working which i’m hoping is more fruitful than previous endeavours with usb audio. i have a feeling this will be easier and have much more boilerplate than the audio setup which has a great deal more variables to juggle.
furthermore i’d like to work on calling a Lua script in a separate file from the command line, just to show how one can write a Lua script as a *.lua file (ie a script in pure Lua), and execute it on the hardware. perhaps this would be a good piece to pair on with another rc-er due to the overlap of languages / interests.
//
when i first arrived today i spent some time pairing on a project euler challenge which led to a discussion about the representability of numbers, how floats work under the hood, and how to represent and operate on numbers that are bigger than the available working datatypes. this felt like a nice exchange with give and take regarding knowledge sharing. in the process i learnt a good chunk about clojure and the power of functional programming. this led onto a discussion & exploration of the mathematical implications of the factorial function. we spent a chunk of time then exploring the manner in which factorial functions necessarily have an increasingly number of trailing zeroes.
beyond this pairing, i also worked on a swift project designing a visualizer for ios. we explored the way in which data is transferred from cpu to gpu, and attempted to trouble-shoot some framerate drops they were experiencing. in the end i think we arrived at a place not a great deal better off in terms of working code, but certainly got a lot more inside how the process was being implemented. the big realization was that it’s very expensive to copy a frame buffer in full-hd, uncompressed, between cpu & gpu.
this then led to a continued pairing on the disco project, which was largely an education in how embedded memory works & also the structure of a dsp loop. we started with trying to explain the usart, leading to DMA, leading to codec as an example, leading to dissecting the dsp block function. obviously dsp blocks are a great example of why DMA is necessary, avoiding codec interrupts affecting the cpu on every sample.
we spoke a lot about how and why to handle pointers in this context, plus delved quite deep into how the leaky-integrator-into-differentiator works as a high-pass (DC) filter. i think i actually came to a better understand of what that code did at the same time.
eventually we ended up looking at the oscillator and discovering that the current version didn’t map the raw incrementer values to a triangle-wave as initially intended. we implemented this mapping function, including a stub function for finding the sign of a float. unfortunately something i’ve added since last thursday is taking a lot of time in the main loop and causing the audio loop to run out of time (and hence be a garbled mess). this is another thing to find a solution to sooner than later, so dsp functions called from lua are meaningful.
a final note about these interactions is they made me realize that using an IDE is not the worst thing in the world. it can be super useful and rapidly speed up development time if used in the right context.
//
tomorrow i plan to pair with a recurser i have yet to spend much time with, as well as have a planning session with 2 recursers to discuss how to implement the rPi games console we’ve been talking about. the idea is to create a system which allows future (and past!) rc-ers to easily add their games into a console system that can be downloaded as an image for folks to take home. we want to provide ability for flexible input devices (keyboard / mouse / gamepad etc), and also make it compatible with a comprehensive list of platforms / languages. additionally a key part of the project is streamlining the process of adding one’s game onto the system, so it’s easy for future rc members to take over the development.
one element one of the members wants to focus on is low-level dev (which they haven’t done). as such we’re probably going to spend some time hooking up leds or other simple hardware bits, so we can have a look at what’s happening on a low-level. we might end up writing a driver for some external hardware piece if there’s something that makes sense in the context.
another proposal is to make a physical console. i think this would be a good method to make the thing more fun & highly used, as well as maintaining more status (and hence visibility) once we’re gone. it would be nice if future batches said “if you’re into games, you should build one and put it on the rConsole!”. not to be vain, but rather to provide a platform that can develop into a larger scale project if someone is so inclined.
//
i’d like to pair with a batchmate on converting the dsp functions to dynamic memory allocation such that they can be constructed/destroyed at runtime. ultimately this is so the dsp graph is dynamic (and thus scriptable), but would be a great lesson in C for someone interested in how memory management works, or wanting to spend more time writing C / handling pointers.
0 notes