Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation since 11/30/16 in Blog Entries

  1. A new forum update is coming soon, and one of the features I'm hyped for are Reactions. We already have post liking, but sometimes a "like" just isn't specific enough. From the IPS Community website: We have the ability to create custom reactions, so if you have any requests for reactions, let us know in the comments!
    3 points
  2. [Edit] If anyone is reading this after the fact, clubs can be found here. A new forum update is coming soon, and one of the features I'm hyped for are Clubs. Clubs are sub-communities where you can discuss various topics that you define. Users From the IPS Community website: Access Levels Content Each club can have their own forums, download categories, blogs, and calendars. Index Forums Club owners can add forums where members can create topics. Club leaders and club moderators have control over these forums and can pin, lock, move, merge, and hide threads in these forums. These screenshots depict a single forum "Topics". Blogs Project Pokémon recently got Blogs. With clubs, you can create a blog managed by the club leaders and club moderators. Downloads Clubs can also have files, similar to our downloads section. Calendars And finally, the calendar. And who knows? Maybe there'll be something else in there too
    2 points
  3. At the company at which I work, we have this legacy application written in C#. (It's different from the one written in Classic ASP.) Let's call this the dragon. It's old, it's previously defeated many brave knights, and its name is an acronym that shares a letter or two with the word "dragon". The dragon is responsible for breathing fire to defend the village from intruders. (It uses coding and algorithms to do Things to Products because of business logic. While the details aren't important, I doubt I could say what it does beyond giving a brief overview of what it looks like to an outside observer.) However, the dragon also has this habit of attacking the knights who control it, so we need a new village gaurdian (the dragon is composed mostly of spaghetti code, and if we are ever to replace it, we need to understand how the spaghetti works). And so, a week or two ago I undertook a challenging task: to shrink the dragon so it'll fear the knights again (to refactor things to make it more readable). Armed with a mouse, keyboard, and the support of a fellow knight (a coworker who's dealt with this application before), I got to work so I could deal a mighty blow to the dragon. (Disclaimer: this post contains a lot of technical C# stuff that can't all be hidden behind dragon metaphores. Hopefully anyone who's not a programmer can still follow.) On my journey of code cleanup, the dragon presented many obstacles. A lot of it was superfluous spacing, redundant comments, and generally painful code, like so: //// //// Configure processing /// this.ConfigureProcessing(); //// //// Do the thing //// try { this.DoTheThing(); } catch { // eat it } if (this.SomeProperty == SomeValue) { // throw new SomeKindOfException(); // this was commented out // to-do: figure out why this was commented out } To make it even better, this.ConfigureProcessing does nothing and is referenced nowhere else, meaning we can easily remove most of the above. Also you should never ever ever ever ever catch an exception without handling it somehow. It will cause pain further down the line (but not in this blog post). If nothing else, log it somehow. Taking all of that into consideration, I reduced that code to this: try { this.DoTheThing(); } catch (Exception ex) { Trace.WriteLine($"Got an exception in TheType.TheFunction: {ex.ToString()}"); } There were also some things outside of general cleanup that I did. Imagine a class like this: public abstract class Magic : IAlgorithm { private string spellName = "Alakazam"; public string SpellName { get { return spellName; } set { if (value == null) { throw new ArgumentException("SpellName can't be null"); } spellName = value; } } private IWizard wizard = null; public IWizard Wizard { get { return wizard; } private set { if (value == null) { throw new ArgumentException("Wizard can't be null"); } wizard = value; } } #region IAlgorithm Methods public void SetWizard(string wizard) { this.Wizard = wizard; } public void Cast() { if (this.Wizard == null) { throw new Exception("Cannot call Execute before SetWizard"); } this.PerformMagic(); } #endregion protected abstract void PerformMagic(); } Not shown: 20 or more classes that inherit from this My fellow adventurer made the observation that the only times SetWizard was called was right after constructors of child classes, kinda like this: public Magic GetMagicInstance(string magicType, string spell, IWizard wizard) { Magic magic = null; switch (magicType) { case "white": magic = new WhiteMagic() { Spell = spell }; magic.SetWizard(wizard); case "black": magic = new BlackMagic() { Spell = spell }; magic.SetWizard(wizard); case "lost": LostMagic magic = new LostMagic() { Spell = spell }; magic.SetWizard(wizard); } return magic; } // Somewhere else calls magic.Cast after all instances of Magic have been created So using this knowledge and the knowledge of new C# features, we made the appropriate changes everywhere to make the class (and related classes) look like this: public abstract class Magic : IAlgorithm { public Magic(string spellName, string wizard) { SpellName = SpellName ?? "Alakazam"; Wizard = wizard ?? throw new ArgumentNullException(nameof(wizard)); } public string SpellName { get; } public IWizard Wizard { get; } #region IAlgorithm Methods public abstract void Cast(); #endregion } They say that if it bleeds, you can kill it. The dragon was certainly bleeding, if the code review tool was anything to go by: there were red lines (removals) all over the place in the pull request (Git terminology basically meaning we're publishing our changes). Two other knights in our party came to inspect our triumph (they reviewed the code to make sure it was done right). When it was all over, a total of 4 people (2 of us were involved in the refactoring) thoroughly reviewed everything and approved. Then we released the changes to be applied to the dragon down in the village (along with some other minor quality-of-life changes). About a week later*, one of the villagers called for help because the dragon that's supposed to defend the village was unable to breathe as much fire (a user opened a support ticket because the Things being done to Products weren't being done correctly). I was skeptical that any of my changes would have that effect. After all, when I shrunk the dragon, I made sure to quintuple-check my changes before releasing it to make sure its fire breath was as unchanged. So I investigated for a few hours to find out why. I ruled out places that could have been affected and was thoroughly stumped. That's when my fellow party member used his influence with the king to learn the secrets known only to the villagers (he used his higher permissions to debug the application, reading data from the production database). That's when I spotted the issue. Remember that constructor in the Magic class that was created? Take another look at the SpellName assignment: SpellName = SpellName ?? "Alakazam"; That should be: SpellName = spellName ?? "Alakazam"; In C#, variables are case-sensitive, so the property was being assigned to itself, and all Magic classes (WhiteMagic, BlackMagic, LostMagic, etc.) all only used the Alakazam spell. No wonder the flames were weak! We fixed the issue, and gave the villagers a dragon capable of properly defending them, and spent the rest of the day identifying how many intruders snuck into the village while the dragon was powerless to stop them (we had to find out which Products didn't have the Thing done properly). Conclusion Case sensitivity can potentially lead to a lot of pain and suffering. In this case with the constructor, that's standard practice in C#, and it's perfectly understandable that no one caught that one mistake, especially since it's just one letter in commit full of thousands of other changes. The tooling didn't catch it, because it checks for useless assignments. This wasn't useless, it says "make SpellName be Alakazam if it's null". Always be careful of casing when variable names are similar. * I massively simplified a lot of things. While a week is probably a bit long to go without noticing anything wrong, there's reasons. Also it didn't affect everything, because it just broke some hacks that are there because business logic.
    2 points
  4. A new forum update is coming soon, and one of the features I'm looking forward to is Device Management. This makes it more difficult for others to gain unauthorized access to your account. From the IPS Community website:
    2 points
  5. They are (arguably) Pokémon that I use or have used in my Twitter banner. Will edit any other used images into this entry. They've been down-scaled to save space and file size. Kotora An unused design that ended up being cut for 2 Generations. This design was first seen by players in the Gold/Silver '97 Spaceworld Demo. It was later discovered to also be cut from the prototype versions of Generation 1, and never made it into the final games. Its Japanese name can be seen as small tiger or tiger cub. Mitei 12 Appears to be a prototype Celebi. This design was first seen by players in the Gold/Silver '99 Spaceworld Demo. Though I believe they did not get to see it in the demo itself, but rather via the leaked game. The name basically means 12th placeholder. Okutank It has the same Japanese name as Octillery, so it is almost evident that this is a beta Octillery. This design was found in the data for the Gold/Silver Spaceworld '97 Demo. Its Japanese name could be a reference to Octopus and Tank. The tank-like elements are more apparent in this design than that final design. Poponeko Based on various similarities between its family in the demo and in the final games, it appears to a beta Skiploom. This design was found in the data for the Gold/Silver Spaceworld '97 Demo. Its Japanese name appears to be a reference to dandelion (popo from tanpopo) and cat (neko). The cat-like elements are more apparent in this design than that of the final design. Presumably the cat-like element was cut for the final games, hence why it looks less like a cat in the final build, and it was subsequently renamed in the final build. Marill Evidently a beta Marill. This design was found in the data for the Gold/Silver Spaceworld '97 Demo. The only thing notable about it, besides it being a rough look different from the final design, is that it apparently has no evolution at that point in development. Pii Evidently a beta Cleffa. This design was found in the data for the Gold/Silver Spaceworld '97 Demo. The only thing notable about it, besides it being a rough look different from the final design, is that it evolves at level 12, instead of being evolution via happiness. Nyorotono Evidently a beta Politoed. This design was found in the data for the Gold/Silver Spaceworld '97 Demo. Akueria This design was found in the data for the Gold/Silver Spaceworld '97 Demo. It is meant to be the final evolution of the water starter received in the demo. It shall be noted that Totodile is not the water starter for this demo. Taaban This design was found in the data for the Gold/Silver Spaceworld '97 Demo. It looks like it was meant to be the Shellder that got detached from a Slowbro/Slowking. Despite its apparently likeness, in the game's data, it has no evolutionary relationship to both the Slowpoke and Shellder lines. Bangirasu Apparently a beta Tyranitar. First seen on the cover of the April 1997 issue of MicroGroup Game Review. The Spaceworld '99 sprite matches the final build. The primary differences would be the change of the sprite's color, as well as the cubital fossa area being indented. This can actually be observed on the final sprite for Pokémon Gold, if that area was colored similarly to the belly area. Lizardon The beta of a female Charizard. First seen (in terms of game data) in one of the earliest prototype builds of Diamond and Pearl. It appears to be an attempt to add several early official artwork that depicts Charizard having only a single horn to the official canon. It only has one horn instead of two horns. This gender difference was never implemented into the final builds of Diamond and Pearl. There is no clue why this gender difference was avoided. Aruseus A beta version of Arceus. First seen from the June 30th Prototype Build of Diamond and Pearl. This version of Arceus already has Multitype as an ability. The default color of grey changes when it becomes other types. Karanakushi Reimagining based on leftover back sprite of Shellos from the final builds of Diamond and Pearl. Looking at the prototype build, this ambiguous back sprite was used, while it already uses the standard West/East sprite for the front sprites. The back sprite's color changes depending on the form. The same phenomenon was observed for Gastrodon. At this stage, it is not certain whether a single unified Shellos & Gastrodon existed before they were split to West/East variation, or this back sprite was simply meant to be used for testing purposes. Nicknamed by fans Latiken A prototype Pokémon that likely spawned the designs of Latias and Blaziken. This design was first seen in a pre-alpha sketch. After the pre-alpha sketch, official artwork was released that appears to match a similar style of the pre-alpha sketch. F-00 Unused shiny coloration for the Pokestar Studio opponent. First seen in Pokémon Black 2 and White 2's data. Eternal Flower Floette A 6th form of Floette, never released to players. This Floette was first seen as a Pokémon owned by AZ in the games Pokémon X&Y. This Floette cannot evolve, and be evolved into. It has 1 less base stat than the base stat total of Florges. It also has a signature Light of Ruin, that cannot be learned by any other Pokémon (besides Smeargle using Sketch on it). As of time of writing, this Pokémon was never released to players, despite the full data being in XY, ORAS, SM, USUM. The personalinfo is technically in LGPE, despite the model not being programmed into those games. Gogoat An unused shiny form of Gogoat. This unused shiny variant was first shown in an official Pokémon X&Y pre-release footage. Its shiny variation was changed upon the release of the final build. It is important to note that the non-shiny variant of Gogoat has been revealed prior to this, and in other parts of the video itself one can see regular Gogoat. Hence why this variant is believed to be the shiny variant, and not a recoloring of the regular variant. Ash Greninja An unused shiny variant of Ash Greninja. At this point in time, Ash Greninja was never made available as being shiny to players. Ghost Ghost of the Mother Marowak. The model is cool, but not obtainable by the player. A story element from the Generation 1 games that gained a 3D model. Like the Generation 1 games, this creature was not meant to be owned by players. Eternatus An Eternatus model from the prototype builds of Sword & Shield. This may not have been an intended design of Eternatus, but rather a bare-boned model for testing the script and story functions of the game. Gen 2 Cyndaquil Coloration Larvitar Coloration Beta Cyndaquil (Probably) Info I have about this is a lil' sketch. If I'm not mistaken, it was found within a leak containing various GS betas. It wasn't found in one of the games, but instead within a backup of sprites found within the source code for Korean localization process. Additionally, a palette file was found alongside it. The data was apparently found in a spot that would have been reserved for Larvitar. As such, the palette appears to be belonging to Larvitar, hence why the color is all messed up. It is not known whether it was intended to have that particular coloration, or Gen 2 Cyndaquil's coloration, or neither. It appears these backups are from the time period where GS betas were still using the Gen 1 engine (think: Spaceworld '97). Given it was thought to be an Ice or Steel type, I came up with a coloration with those types in mind. My fan Ice or Steel coloration Beta Cyndaquil Backsprite
    1 point
  6. Hola todos (Hello everyone) hoy (today) os enseñare los colores en español (i want to show you the colors in spanish lenguage) Empecemos (lets begin) Red -> Rojo Blue -> Azul Green -> Verde Orange -> Naranja (this word its used for fruit too like in english) Brown -> Marron Black -> Negro Pink -> Rosa (Rosa its too for a flower and female name) White -> Blanco Amarillo -> Yellow Purple -> Morado Navy Blue -> Azul marino Grey -> Gris Esto es todo amigos (Thats all guys) Gracias por ver (Thanks for watching)
    1 point
  7. It was with the generation I started that I was inexperienced young and that led me to have a team and a little knowledge of the weaknesses. I started learning the 151 pokemons what made me more excited was the leader's battles since they put my skills to the test, I felt very small, I even captured them all, exchanging my hobbies back then with my relatives i finished the league at 62 hours of play with a team of level 80 as I liked to raise levels did not pose any problem I do not remember what my team was but my water starter had pidgeot and had a machoke and others which were repeated When I came to capture Mewtwo, it was then that I suffered what was mine in my own flesh. I was left without poke balls i have blue and yellow on my own
    1 point
  8. Yeah i have memories in this game and gale of darkness first of all i begin how i played this games i dont know its casuality or destiny or pure luck many years ago my father met someone (same person take choice for obtain gba and pokemon games or game cube with 4 games) temporary period of time game is in my own the game are (mario kart double dash mario party 4 pokemon colosseum and pokemon XD) i recognize i dont began i new game because because exists another and its in begining (he said recently tested this game but he dont make more progress) in that case i began my adventure with my starters (espeon and umbreon dont bad remenber) the rest of team are unknow because i dont remenber but i remenber captured feraligart and transferred in my sapphire the game overall its amazing and this games are difficult because its not for all type of players the trainers and plot events are difficult but no worries the tutorials in this games for how capture and certain things are pretent because dont forget newcomers began in this game team i love so much team cypher and orre region in general are amazing this game have content for dont make bored have something like battle tower the characters gameplay and graphics its good combibation and hope the 8th from switch make me feel the times of pokemon stadium or battle revolution
    1 point
  9. This day its everything and the same time its nothing finally i approved everything and almost i have title of vocational studies that means i can work in every place related with my studies i cant believe the previous day of this day everything its negative but today recieve good new i approved the last one and i can enjoy this summer properly without problem finally its like finally i beat this game its amazing how time passed and since 2012 everyday everytime i tried do the best but this is the day for tell dude you are awarded because you work so hard i dont want forget this moment because its like when naruto its a hokage i dont know how explain its something realizes as person this year i make heroic things than average person are impossible but i m capable for make possible impossible things good summer everyone
    1 point
  10. What do u like the most please tell me Mario or Lugi i prefer Mario because he is a really good character to play with and that i also think that Lugi is a weird character to play and that i do not like him that much i am not that interested in him
    1 point
  11. Hey, we just hit 20 members here ^~^ That's all.. Stop reading, please.. Umm.. '-'
    1 point
  12. For about 8 months, the latest build of the ROM editor had a fatal error in the patcher, used when building a ROM from a project. I put off fixing it because it required updating and cleaning up all of the ROM Editor's dependencies, but today I finally got around to it. Look here for the Usage Guide, which should work with the latest version. Download (Build 53)
    1 point
  13. Today I learned about a feature in our new Gallery app: notes. The feature is best described using pictures. One of the old Project Pokémon banners I had lying around, uploaded to a private album When your mouse is in the giant dark-gray area, there's some buttons. One of them is the Add Note button. The Add Note Button Clicking the Add Note button adds a transparent, resizable, and movable rectangle to the image, which comes with a text box that lets you add text. Once notes are added, they can be read by mousing over the image.
    1 point
  14. By night and by weekend I'm an admin here at Project Pokémon (when I'm not busy saving Hyrule or doing other stuff). But by day, I'm a software developer for a certain company. This company has an internal legacy system written in Classic ASP (a really old language used to make websites) that we have to maintain, and releasing changes to it is never fun. Today we released a month's worth of changes, far more than we like to release at one time. (We couldn't release because reasons; although, we probably should have added a feature switch. Lesson learned.) Within this legacy system, there's a page that is designed to be printed out. Users will then scan an I2of5 barcode on it with a handheld scanner, making it easier to continue their work. After the updated the system, however, we got reports that the barcodes wouldn't scan anymore. Barcodes that were printed before this update worked fine. We reprinted the barcode that was working, and sure enough, the new release gave a different barcode generated from the same source text. I had my hands all over the page with this barcode, but I know I didn't touch the barcode itself. Thanks to source control, we were able to use git blame and looked at the entire code path responsible for the generation of this I2of5 barcode. This kind of barcode is generated by encoding some text into what looks like garbage, but looks like and scans like a barcode when this garbage is displayed using a particular font. Unfortunately, nothing in that code path has changed for years, and since we released this thing a month ago without any (related) issues, we had to find out what changed. Yet comparing the output of the old and new code showed different barcodes. The new barcode's garbage-looking text had some special characters in it called "replacement characters", which is a special kind of character to indicate something's wrong with the character encoding (more on that in a bit). We inspected the HTTP headers and HTML metadata, and there was no difference, so it wasn't a matter of the web browser interpreting the raw text data incorrectly. So we had to try something else. We used a git bisect (or rather a manual version of it, because of a bunch of branching weirdness - don't ask) and eventually found the exact commit that introduced the issue. The only thing that changed about the page in question is that a new ASP file was included. This ASP file, along with the ones it in turn includes, are simply containers for functions and classes and are not intended to write anything to the page. To debug what was causing the problem we removed parts of this included file until finally there was nothing left. We tried removing the reference to this file altogether, and that made the problem go away. We put it back and made sure the file was empty, and to double check, we removed that file and re-created it to make double sure it was empty. Turns out including an empty text file causes issues with our barcode! What is a text file? It's just a file containing bytes that programs interpret as text. But there's different kinds of text. ASCII text interprets one byte as one character. One byte can have a value from 0-255, and while standard ASCII only has characters for 0-127, extended ASCII has characters for 128-255 too. There's also variants of Unicode, where multiple bytes can be used for a single character, which is useful for characters that aren't found in English. How is a program to know what kind of text is in a text file though? By adding extra bytes to the beginning of the file to indicate the text encoding: the Byte Order Mark (BOM). Using HxD, I found that these "empty" text files weren't in fact empty, they had the BOM bytes to mark the file as UTF-8, which is a variant of Unicode that looks like ASCII until the 128-255 byte value range. By including this "empty" file, we were including the BOM, which changed the character encoding of the entire page, completely changing the meaning of the text that's used to display the barcodes (because it uses extended ASCII characters for some reason). Thankfully, this whole release didn't go as bad as it could have. Because of our Blue/Green deployment setup, we weren't under as much pressure as we could have otherwise been, and we only had to revert to the previous version twice, and the release only took 8 hours (because of testing and debugging other issues*). * Bonus material: when using Powershell to create a virtual application in IIS, note that "userName" is case sensitive in some versions of IIS. In 7.5, it's fine to use "username", but when using 8.5, that case sensitivity will cause setting the application credentials to silently fail. (Not that we encountered a situation exactly like this one or anything.)
    1 point
  15. A new forum update is coming soon, and one of the features I'm looking forward to is the blog sidebar. Project Pokémon recently got Blogs. They're already your personal corner of the site, and with this, you can customize them even further. From the IPS Community website:
    1 point
×
×
  • Create New...