Skip to content

Commit

Permalink
Initial commit of the unlucky projects
Browse files Browse the repository at this point in the history
  • Loading branch information
danielcrenna committed Jun 5, 2013
1 parent 6e0d092 commit e162210
Show file tree
Hide file tree
Showing 1,653 changed files with 706,602 additions and 0 deletions.
36 changes: 36 additions & 0 deletions artapp/.gitignore
@@ -0,0 +1,36 @@
#ignore thumbnails created by windows
Thumbs.db
#Ignore files build by Visual Studio
*.obj
*.pdb
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.cache
*.ilk
*.log
[Bb]in
[Dd]ebug*/
*.lib
*.sbr
obj/
[Rr]elease*/
_ReSharper*/
[Tt]est[Rr]esult*
deploy.config
Examples*/
*.vsmdi
*.pidb
*.userprefs
*.testrunconfig
publish.xml
TestResults
*.DS_Store
119 changes: 119 additions & 0 deletions artapp/LICENSE.markdown
@@ -0,0 +1,119 @@
ArtApp
--------------------------------------
Copyright (c) 2012 Daniel Crenna

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


Third Party Licenses
--------------------
1. SSToolkit - A fair number of useful components and vignette images were
sourced from this great library under the following license:

Copyright (c) 2008-2012 Sam Soffes

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

2. MAConfirmButton - I ported the essential bits of this simple but elegant
reproduction of the iOS App Store "Buy" button:

Copyright (c) 2011 Mike Ahmarani

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

3. MonoTouch.Dialog - I used a bare minimum extract of MonoTouch.Dialog
licensed under the terms of the MIT X11 license.

4. TweetStation - I referenced a few classes for the biography views from
Miguel de Icaza's TweetStation project, as well as the built-in web view
controller, licensed under the terms of the
MIT X11 license.

5. iDevRecipes - I ported the custom tab bar implementation from Peter Boctor's
excellent iDevRecipes site, unfortunately I can't find any explicit license terms
on [the GitHub project page](https://github.com/boctor/idev-recipes)

6. Glyphish - Tab bar and web browser icons are attributed to [Glyphish](http://glyphish.com).
Two background images are part of Glyphish Backgrounds, and are watermarked. You must
purchase Glyphish Backgrounds to use the unwatermarked versions or provide your own replacements.

7. NYXImagesKit - Some gradient code was cobbled together from sources in this toolkit under
the license below:

Copyright 2011 Benjamin Godard. All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are
permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this list of
conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice, this list
of conditions and the following disclaimer in the documentation and/or other materials
provided with the distribution.

THIS SOFTWARE IS PROVIDED BY BENJAMIN GODARD ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BENJAMIN GODARD OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

The views and conclusions contained in the software and documentation are those of the
authors and should not be interpreted as representing official policies, either expressed
or implied, of Benjamin Godard.
84 changes: 84 additions & 0 deletions artapp/README.markdown
@@ -0,0 +1,84 @@
![screenshot](https://github.com/danielcrenna/artapp/raw/master/screenshot.jpg)

artapp
======
A beautiful art showcase app for iPhone, built with [MonoTouch](http://xamarin.com/monotouch).

_Artists and Galleries_: If you really want an app that looks like this one but don't know how to program, and
don't have any friends that program, [get in touch](mailto:daniel.crenna@gmail.com) and we can work something out
at a reasonable rate to get your app in the store.

Introduction
============
Not every great idea becomes a business. I had the idea for a mobile art showcase application which could be purchased
by subscription, similar to how [MobileRoadie](http://mobileroadie.com)'s business model works with recording artists,
authors, and other A-listers. But rather than a canned mobile CMS, I wanted artists to stand out from the crowd with
a unique, virtual gallery experience. Above all, it had to be beautiful, which is why I enlisted the great [Gilbert
Guttmann](http://gttmnn.com/), a fantastic artist and person, that I was lucky to meet and work with during my short
stint at [Wildbit](http://wildbit.com).

With that vision I went to work, choosing MonoTouch as my development platform mostly due to my lightning speed in
C# and the compressed time I would be able to work on this project (which was in twenty minute doses due to my other,
far more important side project of raising a child). Since MonoTouch is not free, that might be a sticking point
for this particular offering, but I can tell you that even if you're an Objective-C developer on the main, MonoTouch
is a fantastic framework and beyond a few small details, you can translate Objective-C to C# line by line, as it is
not a simulator or translation layer between you and Cocoa, it's pure interop against native iOS APIs.

Launching
=========
Teaming up with the insanely talented [Meaghan Ogilvie](http://meaghanogilvie.com) of Toronto, a photographer with
a penchant for underwater photography, we launched Meaghan's [own application](http://itunes.apple.com/us/app/meaghan-ogilvie/id504171885?ls=1&mt=8) shortly after [The Artist Project](http://theartistproject.com/), an
independent fine art exhibition in March 2012. The application was well received by many independent artists, and
our value proposition seemed sound: developing an iPhone application is a costly venture for anyone, especially one
of high quality, and providing this service at an ultra affordable price for artists meant they could stand out in
a crowd, showcase their work, and ultimately get greater exposure, a better portfolio, and more art sales.
Art shows are an expensive proposition, with no guarantee of success. We wanted a grass roots way to achieve the
same results through a digital medium.

Learning
========
After conducting customer interviews and talking to over a hundred artists about a service like this one, and other
more successful technologists that I respect, it became clear to me that solving the problem of artist exposure is
not the same proposition as solving the problem of increasing demand for an artist's work, which is the the ultimate
goal. Artists want to sell more of their art, so they can make more art over the long run. Giving them another channel
in which to shout into the void is not the best answer I can come up with. I've got a slow hunch about what a better
answer could be.

Aftermath
=========
Deciding to re-think the problem, I was left with shuttering this incarnation, but there were a lot of challenges
that were solved in this application I was proud of, from a visual perspective as well as technical. It would be a
shame to toss it in the can and move along, especially if there was still some value, for artists, or programmers, or
both, that could be salvaged from the remains, such as:

* It's an example of a real, professionally developed iOS application using MonoTouch, that made it to the App Store.
* It's a beautiful app that can be repurposed for other artists, and galleries, by their programmer friends, for free.
* It's designed to be very simple to switch out content, just add images, a new JSON manifest, and you're good to go.
* Some of the technical challenges (like transparent nav bars) are tricky to solve in MonoTouch; this is a great cheat sheet.

Future
======
You can use this freely, under the MIT License, to help out your favorite artist or gallery by making them a slick
iPhone application (making it work with an iPad should be simply a matter of adjusting cartesian coordinates, since
the assets are already high resolution, but I didn't have the time to get it into the codebase, sorry). You could
even decide I'm insane for giving this away and try to fill the void (if you do that, and you succeed, please buy
all of Meaghan's collected works and install them in your swanky new startup office). You could use it to learn iOS
if you know C# and aren't ready to switch to Objective-C whole hog. You could print out the source code and use the
other side as note paper.


Nitty Gritty
============
* This application is provided as-is. I'll happily take patches but I can't respond to issues. Whatever warts that
came with it, made it into the App Store, and there definitely are warts (some embarassing if you really want to
go hunt for them; code you write to ship is sometimes not the intellectual cornucopia you're capable of, nor should
it be).
* I cut a vast majority of the features attempting to develop the minimum viable product, so any extensions are up to you.
* You get to use Gilbert's layered PSD files as part of this open source license, but, it should go without saying, Meaghan's
fine art is not part of that license, and her work remains fully her own.
* Some of the assets, namely icons and two backgrounds, are purchased from [Glyphish](http://glyphish.com), so you need to own those _very reasonably
priced_ assets if you want to publish your own apps using this code base. Glyphish is a force of good in the universe. Support it!

Art needs technology, and vice versa. Here's some code to help artists. I hope you'll use it.

Daniel Crenna
Binary file added artapp/assets/Buttons.psd
Binary file not shown.
Binary file added artapp/assets/Main UI - iPad.psd
Binary file not shown.
Binary file added artapp/assets/Main UI - iPhone x2.psd
Binary file not shown.
Binary file added artapp/assets/Seamless BG - Hires.psd
Binary file not shown.
Binary file added artapp/assets/Seamless BG - Lowres.psd
Binary file not shown.
Binary file added artapp/assets/iPad - Landscape.psd
Binary file not shown.
Binary file added artapp/assets/iPad - Portrait.psd
Binary file not shown.
Binary file added artapp/assets/iPhone x2 - Portrait.psd
Binary file not shown.
Binary file added artapp/screenshot.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
118 changes: 118 additions & 0 deletions artapp/src/ArtApp.Core/AppDelegate.cs
@@ -0,0 +1,118 @@
using System;
using System.Collections.Generic;
using System.Linq;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using MonoTouch.CoreGraphics;
using MonoTouch.ObjCRuntime;

namespace ArtApp
{
[Preserve]
public partial class AppDelegate : UIApplicationDelegate
{
private static UINavigationController _navigationController;
public static UINavigationController NavigationController
{
get
{
return _navigationController;
}
}

public static CustomNavigationBar NavigationBar
{
get
{
return NavigationController.NavigationBar as CustomNavigationBar;
}
}

private static UIWindow _window;
public static UIWindow ApplicationWindow
{
get
{
return _window;
}
}

public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
CheckBundleVersion();

// Required to set background color behind flip transition
// http://stackoverflow.com/questions/4252350/change-background-color-of-uimodaltransitionstylefliphorizontal
_window = window;
_window.BackgroundColor = UIColor.Black;
_navigationController = navigationController;
_navigationController.View.BackgroundColor = UIColor.Black;

UIApplication.SharedApplication.StatusBarStyle = UIStatusBarStyle.BlackOpaque;

window.RootViewController = navigationController;
window.MakeKeyAndVisible();

return true;
}

private static void CheckBundleVersion()
{
// Drop a version nugget and clear the disk cache if one didn't previously exist, or it's not the same
var version = AppGlobal.BundleVersion;

string appdir = NSBundle.MainBundle.BundleUrl.Path;
string cache = Path.GetFullPath (Path.Combine (appdir, "..", "Library", "Caches"));

var versionPath = Path.Combine(cache, "v.txt");
var dumpDiskCache = false;

if(!File.Exists(versionPath))
{
dumpDiskCache = true;
File.WriteAllText(versionPath, version);
}
else
{
var versionOnDisk = File.ReadAllText(versionPath);
if(!version.Equals(versionOnDisk))
{
dumpDiskCache = true;
File.WriteAllText(versionPath, version);
}
}

if(dumpDiskCache)
{
ImageCache.Clear();
ImageCache.DumpDiskCache();
}
}

// http://stackoverflow.com/questions/9368498/monotouch-items-saved-to-library-caches-never-staying-around
private void DisplayCachesContent()
{
string appdir = NSBundle.MainBundle.BundleUrl.Path;
string cache = Path.GetFullPath (Path.Combine (appdir, "..", "Library", "Caches"));
Console.WriteLine ("Files:");
int i = 0;
foreach (string file in Directory.GetFiles(cache, "*.*", SearchOption.AllDirectories))
{
Console.WriteLine ("{0}. {1}", i++, file);
}
}

public override void OnActivated(UIApplication application)
{
// Required for iOS 3.0
}

public override void ReceiveMemoryWarning (UIApplication application)
{
ImageCache.Clear();
}
}
}

0 comments on commit e162210

Please sign in to comment.