A long time ago, I used a roundabout way of adding events to a users Google Calendar, which in turn, displays these events in Android's native calendar. A great man by the name of Sandeep Rohil gave me the idea of creating apps that add all the public holidays and so forth so people (especially ones that are new to the country and culture) would know whats coming up and more importantly, if they have to go to work or not tomorrow!!!
Now this is back in the Eclair days, so the API was still in puberty, but you'd still assume that there was some sort of functionality for adding stuff to the calendar, I mean it sounds so obvious, right???
Well long story short, there wasn't. But there was an "exploit" which was pretty much a case of guessing the schema of a database you couldn't see and then throwing data at it and then staring at the calendar in the hopes that something, if anything appears!
To put it bluntly, every version of Android on pretty much every phone has slight differences in this regard, of which are impossible to know without having the actual phone in my had. I tested on every phone I and my friends had, but what am I supposed to do about those exclusive Verizon American phones all the way across the water?
Short answer: nothing...
I made a test app to make sure it worked on the customers phone before handing me their precious €0.99 but everyone pretty much ignored it and just bought the apps outright, only to find out first hand whether it worked or not.
As you can see, the reviews were completely hit and miss... And in this world we live in, any form of bad reviews can kill an app, which it sort of did.
Anyway! Fast forward to today (or last year at this stage :S) and we are now living with the controversial version known as Ice Cream Sandwich.
When I read the release notes for this version, one bullet point stuck out like a sore thumb: "Calendar functionality added". The features that I strived so long for, were finally available to me, but more importantly, to the rest of the world too...
I had assumed that everyone and their mother would be finally sinking their teeth into these features and ripping my app off left right and center (whether they knew about it back then or not).
Much to my surprise though, I couldn't find anything on the market after a year of the API being released! So I buckled up and and remade the whole thing! I even went down the road of creating my own Android Library project that does all the work so any specific calendar app I release will have 0 code, no java whatsoever, but Ill talk more on that another day because it's too important to stick on the end of this!!!
So! if you're interested, you can pick up the app here and I'll go a bit more in dept about the disgusting innards next time!!!
Friday 7 June 2013
Wednesday 17 October 2012
App in a Day #1 - Drum Roll
With all this malarkey engines and OpenGL's, I've noticed that I've been straying farther and farther away from what makes the Android framework what it is. In order to make sure that I don't lose that "special touch" that took so long to gain, I've decided that every now and again, I'm going to create a simple app in the space of less than a day that will challenge the areas that I feel are getting a bit rusty.
Today's app is...... (queue drum roll)....... Drum Roll!!!.... wait, what?
Yep, a simple app that plays a drum roll followed by a symbol when you finish.
The key to this app was to take advantage on the fact that 60-80% of an apps worth is in its presentation. I cracked out Photoshop and took a few royalty free images of a snare and added some drumsticks for animation effect. What caught me with the animation though, was that because my thread was running independently it had no interaction with the UI thread at all. This meant that I couldn't actually access any of my ImageView's, which threw up a buttload of runtime errors (yes Chrome, buttload is a word).
To rectify this, I ended up creating another thread within my thread and as much as I'll say threadsception only leads to bad practice, I was at my wits end and just wanted it to work. "But what about not being allowed access all my lovely shiny Views I spent minutes rotating in Photoshop" you say? Well if you pass this inner thread to runOnUiThread(java.lang.Runnable), the Activity class you're extending will actually run the thread on the UI thread (who needs javadoc's when you've got methods with names like this?).
The second problem I had was with the custom ROM I was running. I decided to add ads and upload it for free, not that it will generate much revenue, but testing the new AdMob jar to make sure I have it right before I end up uploading it without any ads proved just as frustrating. Eventually, and I mean EVENTUALLY, I noticed that the webserver that my phone was trying to contact to pull the ads from, was resolving to 127.0.0.1. But how? why? Well I did a quick little SSH on to my phone and checked /etc/hosts and low and behold, hundreds and hundreds of address being redirected to localhost, including all of the ad ones. The guy who made this ROM, blocked all chance of ads ever appearing which is a mixed bag of dicks if you ask me. On the one hand, I never have to look at an ad which as a consumer, is wonderful. But the guy who made whatever app for free is getting absolutly nothing from me, not even an impression, which as a developer, is blasphemy.
Last but not least, I managed to update my ancient splash screen with a fancy schmancy new one featuring my new logo (thanks to James) with a really cool transparent background.
What I did was, set the background colour of the the parent layout in my spash screen xml to #00XXXXXX. This sets the alpha of the colour to 0 so it doesnt really matter what colour you choose. This then lets you see through to the default background behind it, which is black. To then get rid of this, I created a new style in res/values/styles.xml which removes stuff like the title bar and set the background of the Activity to transparent:
<resources>
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
</resources>
(I'll set up syntax highlighting later, I promise)
I then assigned this theme to my splash screen in application tag in the manifest:
<application
android:icon="@drawable/ic_launcher_drum2"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
Regardless of all of the above, the app has been finished and uploaded and can be downloaded here:
Today's app is...... (queue drum roll)....... Drum Roll!!!.... wait, what?
Yep, a simple app that plays a drum roll followed by a symbol when you finish.
The key to this app was to take advantage on the fact that 60-80% of an apps worth is in its presentation. I cracked out Photoshop and took a few royalty free images of a snare and added some drumsticks for animation effect. What caught me with the animation though, was that because my thread was running independently it had no interaction with the UI thread at all. This meant that I couldn't actually access any of my ImageView's, which threw up a buttload of runtime errors (yes Chrome, buttload is a word).
To rectify this, I ended up creating another thread within my thread and as much as I'll say threadsception only leads to bad practice, I was at my wits end and just wanted it to work. "But what about not being allowed access all my lovely shiny Views I spent minutes rotating in Photoshop" you say? Well if you pass this inner thread to runOnUiThread(java.lang.Runnable), the Activity class you're extending will actually run the thread on the UI thread (who needs javadoc's when you've got methods with names like this?).
The second problem I had was with the custom ROM I was running. I decided to add ads and upload it for free, not that it will generate much revenue, but testing the new AdMob jar to make sure I have it right before I end up uploading it without any ads proved just as frustrating. Eventually, and I mean EVENTUALLY, I noticed that the webserver that my phone was trying to contact to pull the ads from, was resolving to 127.0.0.1. But how? why? Well I did a quick little SSH on to my phone and checked /etc/hosts and low and behold, hundreds and hundreds of address being redirected to localhost, including all of the ad ones. The guy who made this ROM, blocked all chance of ads ever appearing which is a mixed bag of dicks if you ask me. On the one hand, I never have to look at an ad which as a consumer, is wonderful. But the guy who made whatever app for free is getting absolutly nothing from me, not even an impression, which as a developer, is blasphemy.
Last but not least, I managed to update my ancient splash screen with a fancy schmancy new one featuring my new logo (thanks to James) with a really cool transparent background.
What I did was, set the background colour of the the parent layout in my spash screen xml to #00XXXXXX. This sets the alpha of the colour to 0 so it doesnt really matter what colour you choose. This then lets you see through to the default background behind it, which is black. To then get rid of this, I created a new style in res/values/styles.xml which removes stuff like the title bar and set the background of the Activity to transparent:
<resources>
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
</resources>
(I'll set up syntax highlighting later, I promise)
I then assigned this theme to my splash screen in application tag in the manifest:
<application
android:icon="@drawable/ic_launcher_drum2"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
Regardless of all of the above, the app has been finished and uploaded and can be downloaded here:
Monday 17 September 2012
Class Diagram
As stated in the last post, here is the current state of the Rithim
The blue represents the main flow of the game. We start with building upon the engine, creating a simple world class that can be used for more than just creating a game class off of, and a main class from which we send our GameBean to from an activity. The GameBean represents the games rules and objectives.
The grey represents the breakdown of the sprites. I have a BaseSprite class that overrides a few methods, such as getX() and getY(), where I add a little code so that I get the center of the sprite, rather than the top corner when I ask for its coordinates. some of these haven't been finished/extended properly yet so I left them floating there but there are more to join them, such as subclasses of the Item class.
Finally, the purple represents the Managers or Factories. I can't decided which to call them. They manage their objects to the fullest degree, but also create them like a factory. Maybe go with Mantories...? or Factagers...? Whatever you want to call them, they handle the creation of 1 or many of their children e.g. ObstacleManager creates obstacles!!!
The blue represents the main flow of the game. We start with building upon the engine, creating a simple world class that can be used for more than just creating a game class off of, and a main class from which we send our GameBean to from an activity. The GameBean represents the games rules and objectives.
The grey represents the breakdown of the sprites. I have a BaseSprite class that overrides a few methods, such as getX() and getY(), where I add a little code so that I get the center of the sprite, rather than the top corner when I ask for its coordinates. some of these haven't been finished/extended properly yet so I left them floating there but there are more to join them, such as subclasses of the Item class.
Finally, the purple represents the Managers or Factories. I can't decided which to call them. They manage their objects to the fullest degree, but also create them like a factory. Maybe go with Mantories...? or Factagers...? Whatever you want to call them, they handle the creation of 1 or many of their children e.g. ObstacleManager creates obstacles!!!
Back in The Saddle II - Revenge of The Saddle
Ok, so even though I think starting the CrowdFunding venture was a little premature, I'm not just going to let it sit there gathering dust. Now while I've had absolutely no free time the past week/week and a half, I'm kicking things into high gear using the following steps of my very quickly put together anti procrastination plan:
- Clean all the shit off my desk (including kitties).
- Create a new account on my computer that only has Eclipse and ADB installed. Maybe do that trick where you redirect websites like Facebook, Reddit etc. to localhost for that user.
- Review all the code I've written and create a Class Diagram of it all which I will update every night.
Sure, it's a very simple 3 step process. I'm sitting here at work at almost 3 o clock in the evening and I've already completed them all (don't ask me how...). The difficult part about all this is the super hard and unforgiving step four:
4. Fucking sit the fuck down and fucking do it.
The key to my success is also the root of my downfall; my computer.
Whenever I sit down at my computer, even the process of sitting down in-front of it reminds me of procrastinating, dossing and playing games.
I've moved my desk all the way around my room and back again. I've bought a new chair, an expensive mouse and an even more expensive keyboard... and it all eventually gets old and circles back around to not working on this game.
A good solution to this would be to work on the game at work, after hours, but I have a cat to feed and I want to keep up my routine at the gym, so that's out of the question. Which is why I've had to settle for step 2 and 3.
----------------------------------------------------------------------------------------
On a note related to all of this talk about motivation, I recieved a message from one person who decided to critique my game to the furthest degree. As angry as it made me, you can't say no to being given the chance to analyze every single fault you have made so far. One of which was that I don't need a second developer.
This got me thinking and allowed me to visualize the game from the perspective of its complete timeline for the first time ever. And all I saw were a few months... How the hell is that possible??? Well, simply put, "to fuck with copying the standards of other games". The game doesn't need Feint, it doesn't need Facebook integration, it doesn't need a buddy system; it just needs to be played.
So in short, to fuck with everything, I'm making my game the way I want it and if it goes against the norm, the fuck the norm, and if it gets buried underneath all those themed match-up games, then so be it. I have more games to be working on, like Bubble Cats, Squap, Evelyn, and many more that I'm going to think up on the way.
The life that I wan't may or may not start with Rithim, but it certainly will not end with it.
Sunday 2 September 2012
Rithim - Gameplay
Been getting a lot of feedback about the IndieGoGo page, one big point is that I shouldn't be using the pitch video as a demonstration video at the same time. It's simply too long.
So in answer to that, here is a shorter gameplay only version:
So in answer to that, here is a shorter gameplay only version:
Rithim on IndieGoGo
Seeing as nobody's over on 8BitFunding any more, I've launched the campaign over on IndieGoGo!
It's going to be a long and tough process trying to generate traffic and get this project out there, but I'm not going to give up on this over the next couple of months. I have a lot of blogs and sites to contact and I also have to start uploading those update videos for each new version I make.
Anyway, be sure to check it out!
It's going to be a long and tough process trying to generate traffic and get this project out there, but I'm not going to give up on this over the next couple of months. I have a lot of blogs and sites to contact and I also have to start uploading those update videos for each new version I make.
Anyway, be sure to check it out!
Thursday 30 August 2012
8BitFunding - Review Stage
Well, after a long and painful process of filming and refilming and then finding the time to learn and ectually do some editing, everything is ready.
The campaign has been submitted to 8BitFunding and is currently under review.
I've already tried getting in contact with the crowd who run the website on several ocasions leading up to now and have heard absolutly nothing back, which leads me to believe theres a posiblility that they're not paying much attention to their website anymore.
So I'm going to give it a few days and if its still in the reviewal stages, I'm going to consider switching over to IndieGoGo.
The campaign has been submitted to 8BitFunding and is currently under review.
I've already tried getting in contact with the crowd who run the website on several ocasions leading up to now and have heard absolutly nothing back, which leads me to believe theres a posiblility that they're not paying much attention to their website anymore.
So I'm going to give it a few days and if its still in the reviewal stages, I'm going to consider switching over to IndieGoGo.
Subscribe to:
Posts (Atom)