Initial add of remaining items.

Initial commit of remaining items in JamesRSkemp subversion project.
Revision 1289.
This commit is contained in:
James Skemp 2013-02-15 04:20:56 -06:00
commit 6901692c0a
553 changed files with 102135 additions and 0 deletions

144
AppManager.html Normal file
View File

@ -0,0 +1,144 @@
<!DOCTYPE html>
<html lang="en" manifest="/manifest/media.manifest">
<head>
<title>Offline Application Manager - JamesRSkemp.com</title>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-541034-10']);
_gaq.push(['_setDomainName', 'media.jamesrskemp.com']);
_gaq.push(['_trackPageview']);
(function () {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<style type="text/css">
h1
{
font-size:16px;
}
h2
{
background-color:#ccc;
color:#fff;
font-size:14px;
padding:.25em;
}
ul
{
margin-right:.5em;
}
#Footer
{
border-top:1px dashed #ccc;
font-size:70%;
margin-top:.5em;
text-align:right;
}
</style>
</head>
<body>
<h1>Offline application manager</h1>
<h2>Offline information</h2>
<div id="OfflineInformation">Information not yet loaded.</div>
<h2>Local storage</h2>
<div id="LocalStorage">Information not yet loaded.</div>
<h2>Application cache</h2>
<div id="ApplicationCache">Information not yet loaded.</div>
<div id="Footer">Web application manager created by <a href="http://jamesrskemp.com" rel="external">James Skemp</a>.</div>
<!-- We want to load our local version for cache manifest support. -->
<script type="text/javascript" src="/js/jquery-1.5.2.min.js"></script>
<script type="text/javascript" src="/js/JamesRSkemp.min.js"></script>
<script type="text/javascript">
var CurrentPageScripts = {
addEventsToApplicationCache: function () {
var cache = window.applicationCache;
cache.addEventListener('cached', CurrentPageScripts.UpdateApplicationCacheActivity, false);
cache.addEventListener('checking', CurrentPageScripts.UpdateApplicationCacheActivity, false);
cache.addEventListener('downloading', CurrentPageScripts.UpdateApplicationCacheActivity, false);
cache.addEventListener('error', CurrentPageScripts.UpdateApplicationCacheActivity, false);
cache.addEventListener('noupdate', CurrentPageScripts.UpdateApplicationCacheActivity, false);
cache.addEventListener('obsolete', CurrentPageScripts.UpdateApplicationCacheActivity, false);
cache.addEventListener('progress', CurrentPageScripts.UpdateApplicationCacheActivity, false);
cache.addEventListener('updateready', CurrentPageScripts.UpdateApplicationCacheActivity, false);
},
OutputOfflineStatus: function () {
var offlineSupported = JamesRSkemp.supportsOffline();
var offlineContent = $('#OfflineInformation').html('Offline supported: ' + offlineSupported);
if (offlineSupported) {
offlineContent.append('<br />Browser offline: ' + JamesRSkemp.browserOffline());
}
},
OutputLocalStorageStatus: function () {
var localStorageSupported = JamesRSkemp.LocalStorage.isSupported();
var localStorageContent = $('#LocalStorage').html('Local storage supported: ' + localStorageSupported);
if (localStorageSupported) {
localStorageContent.append('<div id="localStorageStatus"></div>');
CurrentPageScripts.UpdateLocalStorageStatus();
}
},
OutputApplicationCacheStatus: function () {
var applicationCacheSupported = JamesRSkemp.ApplicationCache.isSupported();
var applicationCacheContent = $('#ApplicationCache').html('Application cache supported: ' + applicationCacheSupported);
if (applicationCacheSupported) {
applicationCacheContent.append('<div id="appCacheActivity"></div>');
applicationCacheContent.append('<div id="appCacheStatus"></div>')
.append('<a href="#" onclick="CurrentPageScripts.UpdateApplicationCacheStatus();return false;">Current status</a>')
.append('<br /><a href="#" onclick="window.applicationCache.update();return false;">Check for updated cache manifest</a>');
// todo
CurrentPageScripts.addEventsToApplicationCache();
}
},
UpdateLocalStorageStatus: function () {
var localStorageCount = JamesRSkemp.LocalStorage.itemCount();
var localStorageContent = $('#localStorageStatus').html('Number of items in local storage: ' + localStorageCount)
.append('<br />Total bytes used: ' + JamesRSkemp.LocalStorage.bytesUsed())
.append('<br /><a href="#" onclick="CurrentPageScripts.UpdateLocalStorageStatus();return false;">Refresh information</a>');
if (localStorageCount > 0) {
localStorageContent.append('<ul>');
for (var i = 0; i < window.localStorage.length; i++) {
var storageItemString = window.localStorage.getItem(window.localStorage.key(i));
// todo - change remove into function, and have this refreshed.
localStorageContent.append('<li><strong>' + window.localStorage.key(i) + '</strong> [' + storageItemString.length + '] <a href="#" onclick="CurrentPageScripts.PreviewLocalStorageItem(\'' + window.localStorage.key(i) + '\');return false;">Preview item</a> | <a href="#" onclick="window.localStorage.removeItem(\'' + window.localStorage.key(i) + '\');CurrentPageScripts.UpdateLocalStorageStatus();return false;">Remove item</a></li>');
}
localStorageContent.append('</ul>');
localStorageContent.append('<div id="localStorageContentBlock"><a href="#" onclick="$(\'#localStorageContentBlock\').hide();return false;" style="font-size:90%;">Hide content</a><br /><textarea id="localStorageItemContent" rows="6" cols="100"></textarea></div>');
$('#localStorageContentBlock').hide();
}
},
UpdateApplicationCacheActivity: function (evt) {
$('#appCacheActivity').append((evt != null ? evt.type + ', ' : ''));
},
UpdateApplicationCacheStatus: function () {
$('#appCacheStatus').html('Current status: ' + JamesRSkemp.ApplicationCache.currentStatus() + '<br />');
},
PreviewLocalStorageItem: function (itemName) {
var contentBlock = $('#localStorageContentBlock').hide();
$('#localStorageItemContent').val(window.localStorage.getItem(itemName));
contentBlock.show();
}
};
if (typeof ($) !== undefined) {
$(document).ready(function () {
CurrentPageScripts.OutputOfflineStatus();
CurrentPageScripts.OutputLocalStorageStatus();
CurrentPageScripts.OutputApplicationCacheStatus();
});
}
</script>
</body>
</html>

9778
App_Data/playlistXml.xml Normal file

File diff suppressed because it is too large Load Diff

8
Default.htm Normal file
View File

@ -0,0 +1,8 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
</body>
</html>

62
FormulasService.cs Normal file
View File

@ -0,0 +1,62 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
// begin additions
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.ComponentModel;
// end additions, although the following one is too
using JamesRSkemp.Formulas;
namespace JamesRSkemp.Media.Web {
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class FormulasService {
// todo - remove
// need at least one method - may as well create a dummy one for validation
[WebGet(UriTemplate = "Dummy")]
[Description("Dummy operation.")]
public String DummyMethod() {
return "It works.";
}
// http://localhost:50996/FormulasService/Loan?name=asdf&total=4956.24&payment=97.85&yearlyPayments=12&yearlyInterest=4.25
[WebGet(UriTemplate = "Loan?name={name}&total={amount}&payment={payment}&yearlyPayments={paymentsPerYear}&yearlyInterest={interestPerYear}")]
[Description("Create a new loan with set properties")]
public Amortization.Loan CreateLoan(String name, String amount, String payment, String paymentsPerYear, String interestPerYear) {
Double loanAmount, loanPayment, loanInterest;
int loanPaymentsPerYear;
Double.TryParse(amount, out loanAmount);
Double.TryParse(payment, out loanPayment);
int.TryParse(paymentsPerYear, out loanPaymentsPerYear);
Double.TryParse(interestPerYear, out loanInterest);
// todo - validation of items > 0
// todo - validation that the loan terms make sense (interest < payments)
// If everything looks okay, create a new loan.
Amortization.Loan newLoan = new Amortization.Loan();
newLoan.Name = name;
newLoan.Total = loanAmount;
newLoan.PaymentAmount = loanPayment;
newLoan.PaymentsPerYear = loanPaymentsPerYear;
newLoan.InterestPerYear = loanInterest;
try {
newLoan.UpdatePayments();
} catch (Exception ex) {
newLoan.Name = ex.Message + " | " + ex.StackTrace;
// todo, throw appropriate error here
}
return newLoan;
}
}
}

1
Global.asax Normal file
View File

@ -0,0 +1 @@
<%@ Application Codebehind="Global.asax.cs" Inherits="JamesRSkemp.Media.Web.Global" Language="C#" %>

19
Global.asax.cs Normal file
View File

@ -0,0 +1,19 @@
using System;
using System.ServiceModel.Activation;
using System.Web;
using System.Web.Routing;
namespace JamesRSkemp.Media.Web {
public class Global : HttpApplication {
void Application_Start(object sender, EventArgs e) {
RegisterRoutes();
}
private void RegisterRoutes() {
// Edit the base address of Service1 by replacing the "Service1" string below
RouteTable.Routes.Add(new ServiceRoute("Service1", new WebServiceHostFactory(), typeof(Service1)));
RouteTable.Routes.Add(new ServiceRoute("MusicService", new WebServiceHostFactory(), typeof(MusicService)));
RouteTable.Routes.Add(new ServiceRoute("FormulasService", new WebServiceHostFactory(), typeof(FormulasService)));
}
}
}

View File

@ -0,0 +1,730 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>
</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{DF951891-1F7D-4BC4-A05D-B0045D8BA6B0}</ProjectGuid>
<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>JamesRSkemp.Media.Web</RootNamespace>
<AssemblyName>JamesRSkemp.Media.Web</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<UseIISExpress>true</UseIISExpress>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup />
<ItemGroup>
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Web.DataVisualization" />
<Reference Include="System.Web.DynamicData" />
<Reference Include="System.Web.Entity" />
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.EnterpriseServices" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.ServiceModel.Web" />
<Reference Include="System.ServiceModel.Activation" />
<Reference Include="System.Web" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Web.Services" />
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" />
</ItemGroup>
<ItemGroup>
<Content Include="App_Data\playlistXml.xml" />
<Content Include="articles\IIS6FTPSample.log.txt" />
<Content Include="articles\JamesRSkemp.Formulas.Amortization.cs.txt" />
<Content Include="articles\JamesRSkemp.WebServices.Lastfm.cs.txt" />
<Content Include="articles\JamesRSkemp.WebServices.YahooMusic.cs.txt" />
<Content Include="articles\ServiceExamples\FormulasService_Loan.css" />
<Content Include="articles\ServiceExamples\FormulasService_Loan.htm" />
<Content Include="articles\ServiceExamples\FormulasService_Loan.js" />
<Content Include="articles\Track.php.txt" />
<Content Include="clientaccesspolicy.xml" />
<Content Include="crossdomain.xml" />
<Content Include="css\vehicle_gas.css" />
<Content Include="Default.htm" />
<Content Include="downloads\CrossSumsHelper_2.0.exe" />
<Content Include="downloads\CrossSumsHelper_2.1.exe" />
<Content Include="downloads\iPod_Top100_20090227.xml" />
<Content Include="downloads\iTunesPlaylists2Xml.xslt" />
<Content Include="downloads\iTunesPlaylistsToXml.css" />
<Content Include="downloads\iTunesPlaylistsToXml.htm" />
<Content Include="favicon.ico" />
<Content Include="gallery\P001.jpg" />
<Content Include="gallery\P001_0810.jpg" />
<Content Include="gallery\P002.jpg" />
<Content Include="gallery\P002_0810.jpg" />
<Content Include="gallery\P003.jpg" />
<Content Include="gallery\P003_0810.jpg" />
<Content Include="gallery\P004.jpg" />
<Content Include="gallery\P004_0810.jpg" />
<Content Include="gallery\P005.jpg" />
<Content Include="gallery\P005_0810.jpg" />
<Content Include="gallery\P006.jpg" />
<Content Include="gallery\P006_0810.jpg" />
<Content Include="gallery\P007.jpg" />
<Content Include="gallery\P007_0810.jpg" />
<Content Include="gallery\P008.jpg" />
<Content Include="gallery\P008_0810.jpg" />
<Content Include="gallery\P009.jpg" />
<Content Include="gallery\P009_0810.jpg" />
<Content Include="gallery\P010.jpg" />
<Content Include="gallery\P010_0810.jpg" />
<Content Include="gallery\P011.jpg" />
<Content Include="gallery\P011_0810.jpg" />
<Content Include="gallery\P012.jpg" />
<Content Include="gallery\P012_0810.jpg" />
<Content Include="gallery\P013.jpg" />
<Content Include="gallery\P013_0810.jpg" />
<Content Include="gallery\P014.jpg" />
<Content Include="gallery\P014_0810.jpg" />
<Content Include="gallery\P015.jpg" />
<Content Include="gallery\P015_0810.jpg" />
<Content Include="gallery\P016.jpg" />
<Content Include="gallery\P016_0810.jpg" />
<Content Include="gallery\P017.jpg" />
<Content Include="gallery\P017_0810.jpg" />
<Content Include="gallery\P018.jpg" />
<Content Include="gallery\P018_0810.jpg" />
<Content Include="gallery\P019.jpg" />
<Content Include="gallery\P019_0810.jpg" />
<Content Include="gallery\P020.jpg" />
<Content Include="gallery\P020_0810.jpg" />
<Content Include="Global.asax" />
<Content Include="graphics\apache_http\apache_2.2.9_install_01.jpg" />
<Content Include="graphics\apache_http\apache_2.2.9_install_02.jpg" />
<Content Include="graphics\apache_http\apache_2.2.9_install_03.jpg" />
<Content Include="graphics\apache_http\apache_2.2.9_install_04.jpg" />
<Content Include="graphics\apache_http\apache_2.2.9_install_05.jpg" />
<Content Include="graphics\apache_http\apache_2.2.9_install_06.jpg" />
<Content Include="graphics\apache_http\apache_2.2.9_install_07.jpg" />
<Content Include="graphics\apache_http\apache_2.2.9_install_08.jpg" />
<Content Include="graphics\apache_http\apache_2.2.9_install_09.jpg" />
<Content Include="graphics\apache_http\apache_2.2.9_install_10.jpg" />
<Content Include="graphics\apache_http\apache_2.2.9_install_11.jpg" />
<Content Include="graphics\apache_http\apache_2.2.9_install_12.jpg" />
<Content Include="graphics\bioform\basicworms\CurlWorm-Spik1_FanHornCluster_SpiralWorm.jpg" />
<Content Include="graphics\bioform\basicworms\CurlWorm.jpg" />
<Content Include="graphics\bioform\basicworms\CurlWorm_Anemone.jpg" />
<Content Include="graphics\bioform\basicworms\CurlWorm_Cluster.jpg" />
<Content Include="graphics\bioform\basicworms\CurlWorm_Fan.jpg" />
<Content Include="graphics\bioform\basicworms\CurlWorm_FanHorn.jpg" />
<Content Include="graphics\bioform\basicworms\CurlWorm_FanHornCluster_SpiralWorm-Spik1.jpg" />
<Content Include="graphics\bioform\basicworms\CurlWorm_FanHornCluster_SpiralWorm.jpg" />
<Content Include="graphics\bioform\basicworms\CurlWorm_FanHorn_TorusSpline.jpg" />
<Content Include="graphics\bioform\basicworms\CurlWorm_Fan_SpiralWorm.jpg" />
<Content Include="graphics\bioform\basicworms\CurlWorm_Horn.jpg" />
<Content Include="graphics\bioform\basicworms\CurlWorm_Hull.jpg" />
<Content Include="graphics\bioform\basicworms\CurlWorm_Trilobyt.jpg" />
<Content Include="graphics\bioform\basicworms\CurlWorm_Wheel.jpg" />
<Content Include="graphics\bioform\basicworms\DoubleSpiral.jpg" />
<Content Include="graphics\bioform\basicworms\DoubleSpiral_Anemone.jpg" />
<Content Include="graphics\bioform\basicworms\DoubleSpiral_Cluster.jpg" />
<Content Include="graphics\bioform\basicworms\DoubleSpiral_Fan.jpg" />
<Content Include="graphics\bioform\basicworms\DoubleSpiral_Horn.jpg" />
<Content Include="graphics\bioform\basicworms\DoubleSpiral_Hull.jpg" />
<Content Include="graphics\bioform\basicworms\DoubleSpiral_Trilobyt.jpg" />
<Content Include="graphics\bioform\basicworms\DoubleSpiral_Wheel.jpg" />
<Content Include="graphics\bioform\basicworms\FormWorm.jpg" />
<Content Include="graphics\bioform\basicworms\FormWorm_Anemone.jpg" />
<Content Include="graphics\bioform\basicworms\FormWorm_Cluster.jpg" />
<Content Include="graphics\bioform\basicworms\FormWorm_Fan.jpg" />
<Content Include="graphics\bioform\basicworms\FormWorm_Horn.jpg" />
<Content Include="graphics\bioform\basicworms\FormWorm_Hull.jpg" />
<Content Include="graphics\bioform\basicworms\FormWorm_Trilobyt.jpg" />
<Content Include="graphics\bioform\basicworms\FormWorm_Wheel.jpg" />
<Content Include="graphics\bioform\basicworms\SpiralWorm.jpg" />
<Content Include="graphics\bioform\basicworms\SpiralWorm_Anemone.jpg" />
<Content Include="graphics\bioform\basicworms\SpiralWorm_Cluster.jpg" />
<Content Include="graphics\bioform\basicworms\SpiralWorm_Fan.jpg" />
<Content Include="graphics\bioform\basicworms\SpiralWorm_Fan_CurlWorm.jpg" />
<Content Include="graphics\bioform\basicworms\SpiralWorm_Fan_TwoDWorm.jpg" />
<Content Include="graphics\bioform\basicworms\SpiralWorm_Horn.jpg" />
<Content Include="graphics\bioform\basicworms\SpiralWorm_Horn_CurlWorm.jpg" />
<Content Include="graphics\bioform\basicworms\SpiralWorm_Horn_DoubleSpiral.jpg" />
<Content Include="graphics\bioform\basicworms\SpiralWorm_Hull.jpg" />
<Content Include="graphics\bioform\basicworms\SpiralWorm_Trilobyt.jpg" />
<Content Include="graphics\bioform\basicworms\SpiralWorm_Wheel.jpg" />
<Content Include="graphics\bioform\basicworms\TorusSpline.jpg" />
<Content Include="graphics\bioform\basicworms\TorusSpline_Anemone.jpg" />
<Content Include="graphics\bioform\basicworms\TorusSpline_Anemone_CurlWorm.jpg" />
<Content Include="graphics\bioform\basicworms\TorusSpline_Cluster.jpg" />
<Content Include="graphics\bioform\basicworms\TorusSpline_Fan.jpg" />
<Content Include="graphics\bioform\basicworms\TorusSpline_Horn.jpg" />
<Content Include="graphics\bioform\basicworms\TorusSpline_Hull.jpg" />
<Content Include="graphics\bioform\basicworms\TorusSpline_Trilobyt.jpg" />
<Content Include="graphics\bioform\basicworms\TorusSpline_Wheel.jpg" />
<Content Include="graphics\bioform\basicworms\TwoDWorm.jpg" />
<Content Include="graphics\bioform\basicworms\TwoDWorm_Anemone.jpg" />
<Content Include="graphics\bioform\basicworms\TwoDWorm_Cluster.jpg" />
<Content Include="graphics\bioform\basicworms\TwoDWorm_Fan.jpg" />
<Content Include="graphics\bioform\basicworms\TwoDWorm_Horn.jpg" />
<Content Include="graphics\bioform\basicworms\TwoDWorm_Hull.jpg" />
<Content Include="graphics\bioform\basicworms\TwoDWorm_Trilobyt.jpg" />
<Content Include="graphics\bioform\basicworms\TwoDWorm_Wheel.jpg" />
<Content Include="graphics\bioform\bio_camera.jpg" />
<Content Include="graphics\bioform\bio_includes.jpg" />
<Content Include="graphics\bioform\bio_options.jpg" />
<Content Include="graphics\bioform\bio_options_small.jpg" />
<Content Include="graphics\bioform\bio_renderwin.jpg" />
<Content Include="graphics\bioform\bio_splash.jpg" />
<Content Include="graphics\bioform\bio_startup.jpg" />
<Content Include="graphics\bioform\bio_startup_small.jpg" />
<Content Include="graphics\bioform\bio_toolbar1.jpg" />
<Content Include="graphics\bioform\bio_toolbar2.jpg" />
<Content Include="graphics\collabnet_subversion\collabnetsubversion_1.6.3_install_01.jpg" />
<Content Include="graphics\collabnet_subversion\collabnetsubversion_1.6.3_install_02.jpg" />
<Content Include="graphics\collabnet_subversion\collabnetsubversion_1.6.3_install_03.jpg" />
<Content Include="graphics\collabnet_subversion\collabnetsubversion_1.6.3_install_04.jpg" />
<Content Include="graphics\collabnet_subversion\collabnetsubversion_1.6.3_install_05.jpg" />
<Content Include="graphics\collabnet_subversion\collabnetsubversion_1.6.3_install_06.jpg" />
<Content Include="graphics\collabnet_subversion\collabnetsubversion_1.6.3_install_07.jpg" />
<Content Include="graphics\collabnet_subversion\collabnetsubversion_1.6.3_install_08.jpg" />
<Content Include="graphics\collabnet_subversion\collabnetsubversion_1.6.3_install_09.jpg" />
<Content Include="graphics\collabnet_subversion\repotest_01.jpg" />
<Content Include="graphics\collabnet_subversion\repotest_02.jpg" />
<Content Include="graphics\collabnet_subversion\repotest_03.jpg" />
<Content Include="graphics\collabnet_subversion\repotest_04.jpg" />
<Content Include="graphics\collabnet_subversion\repotest_05.jpg" />
<Content Include="graphics\collabnet_subversion\repotest_06.jpg" />
<Content Include="graphics\collabnet_subversion\repotest_07.jpg" />
<Content Include="graphics\collabnet_subversion\repotest_08.jpg" />
<Content Include="graphics\collabnet_subversion\repotest_09.jpg" />
<Content Include="graphics\collabnet_subversion\repotest_10.jpg" />
<Content Include="graphics\collabnet_subversion\repotest_11.jpg" />
<Content Include="graphics\collabnet_subversion\repotest_12.jpg" />
<Content Include="graphics\collabnet_subversion\repotest_13.jpg" />
<Content Include="graphics\iTunesPlaylistsToXml\Example.png" />
<Content Include="graphics\misc\EntertainmentSetup20091024.jpg" />
<Content Include="graphics\misc\height.jpg" />
<Content Include="graphics\misc\inboxdollars5.gif" />
<Content Include="graphics\misc\length.jpg" />
<Content Include="graphics\misc\NetflixPlaystation3Disc.jpg" />
<Content Include="graphics\misc\NetflixPlaystation3Interface.jpg" />
<Content Include="graphics\misc\stars.png" />
<Content Include="graphics\misc\StrivingLifeGmail.png" />
<Content Include="graphics\misc\width.jpg" />
<Content Include="graphics\oXygenXmlEditor\oXygen_XmlSchemaDefinition_1.jpg" />
<Content Include="graphics\oXygenXmlEditor\oXygen_XmlSchemaDefinition_10.jpg" />
<Content Include="graphics\oXygenXmlEditor\oXygen_XmlSchemaDefinition_11.jpg" />
<Content Include="graphics\oXygenXmlEditor\oXygen_XmlSchemaDefinition_12.jpg" />
<Content Include="graphics\oXygenXmlEditor\oXygen_XmlSchemaDefinition_13.jpg" />
<Content Include="graphics\oXygenXmlEditor\oXygen_XmlSchemaDefinition_14.jpg" />
<Content Include="graphics\oXygenXmlEditor\oXygen_XmlSchemaDefinition_2.jpg" />
<Content Include="graphics\oXygenXmlEditor\oXygen_XmlSchemaDefinition_3.jpg" />
<Content Include="graphics\oXygenXmlEditor\oXygen_XmlSchemaDefinition_4.jpg" />
<Content Include="graphics\oXygenXmlEditor\oXygen_XmlSchemaDefinition_5.jpg" />
<Content Include="graphics\oXygenXmlEditor\oXygen_XmlSchemaDefinition_6.jpg" />
<Content Include="graphics\oXygenXmlEditor\oXygen_XmlSchemaDefinition_7.jpg" />
<Content Include="graphics\oXygenXmlEditor\oXygen_XmlSchemaDefinition_8.jpg" />
<Content Include="graphics\oXygenXmlEditor\oXygen_XmlSchemaDefinition_9.jpg" />
<Content Include="graphics\repotest\repotest_01.jpg" />
<Content Include="graphics\repotest\repotest_02.jpg" />
<Content Include="graphics\repotest\repotest_03.jpg" />
<Content Include="graphics\repotest\repotest_04.jpg" />
<Content Include="graphics\repotest\repotest_05.jpg" />
<Content Include="graphics\repotest\repotest_06.jpg" />
<Content Include="graphics\repotest\repotest_07.jpg" />
<Content Include="graphics\repotest\repotest_08.jpg" />
<Content Include="graphics\repotest\repotest_09.jpg" />
<Content Include="graphics\repotest\repotest_10.jpg" />
<Content Include="graphics\repotest\repotest_11.jpg" />
<Content Include="graphics\repotest\repotest_12.jpg" />
<Content Include="graphics\repotest\repotest_13.jpg" />
<Content Include="graphics\repotest\repotest_14.jpg" />
<Content Include="graphics\repotest\repotest_15.jpg" />
<Content Include="graphics\repotest\repotest_16.jpg" />
<Content Include="graphics\repotest\repotest_17.jpg" />
<Content Include="graphics\repotest\repotest_18.jpg" />
<Content Include="graphics\repotest\repotest_19.jpg" />
<Content Include="graphics\repotest\repotest_20.jpg" />
<Content Include="graphics\repotest\repotest_21.jpg" />
<Content Include="graphics\repotest\repotest_22.jpg" />
<Content Include="graphics\repotest\repotest_23.jpg" />
<Content Include="graphics\repotest\repotest_24.jpg" />
<Content Include="graphics\repotest\repotest_25.jpg" />
<Content Include="graphics\repotest\repotest_26.jpg" />
<Content Include="graphics\repotest\repotest_27.jpg" />
<Content Include="graphics\repotest\repotest_28.jpg" />
<Content Include="graphics\repotest\repotest_29.jpg" />
<Content Include="graphics\repotest\repotest_30.jpg" />
<Content Include="graphics\repotest\repotest_31.jpg" />
<Content Include="graphics\repotest\repotest_32.jpg" />
<Content Include="graphics\repotest\repotest_33.jpg" />
<Content Include="graphics\repotest\repotest_34.jpg" />
<Content Include="graphics\repotest\repotest_35.jpg" />
<Content Include="graphics\repotest\repotest_36.jpg" />
<Content Include="graphics\repotest\repotest_37.jpg" />
<Content Include="graphics\repotest\repotest_38.jpg" />
<Content Include="graphics\repotest\repotest_39.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\AdapterForegrip.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\AdapterHandguard.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\BarrelAdapter.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\CombatSight.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\CompactScopeAlpha.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\CompactScopeBeta.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\DotSight.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\DoubleSub-Barrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\ExpandableHandguard.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\ExpanderGrip_1.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\ExpanderGrip_2.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\ExpanderPlusSub-Barrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\ExpanderSub-Barrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\ExpanderSuperBarrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\ExpanderTSub-Barrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\ExpanderTwinS-Barrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\FlashSub-Barrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\Foregrip.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\Handguard.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\HGDrumMagazine.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\HGExpanderBarrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\HGExpanderBarrelPro.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\HGHighBarrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\HGL-RailBarrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\HGLongBarrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\HGMagazine2.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\HGMagazine3.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\HGMagazine4.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\HGMagazine5.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\HGMagazine6.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\HGMulti-Barrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\HGRookieBarrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\HGRookieMagazine.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\HGS-RailBarrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\High-MountElite.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\High-MountPro.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\High-MountSight.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\L-Grip.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\LBarrelAdapter.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\LensAdapter.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\LongExpanderBarrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\LongLens.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\LongScope.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\LongScopeElite.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\LongScopeMount.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\LongScopePro.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\MGDoubleBarrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\MGDrumMagazine.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\MGExpanderBarrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\MGHighBarrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\MGL-RailBarrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\MGLongBarrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\MGMagazine12.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\MGMagazine3.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\MGMagazine5.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\MGMagazine6.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\MGMagazine8.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\MGMagazine9.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\MGMulti-Barrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\MGRookieBarrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\MGRookieMagazine.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\MGS-RailBarrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\Mini-Lens.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\MultiSub-Barrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\PrototypeMount.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\RailSub-Barrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\RookieGrip.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\RookieSight.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\ScattershotSub-Barrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\ScopeMount.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\ShortSub-Barrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\SpecialScope.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\Sub-Barrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\Sub-Sight.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\TelephotoLens.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\TerminalSub-Barrel.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\Top-RailScope.jpg" />
<Content Include="graphics\ResonanceOfFate\Parts\TopSight.jpg" />
<Content Include="graphics\ResonanceOfFate\Weapon_1191.45-Auto.jpg" />
<Content Include="graphics\ResonanceOfFate\Weapon_1191.45Golden.jpg" />
<Content Include="graphics\ResonanceOfFate\Weapon_B-N84.jpg" />
<Content Include="graphics\ResonanceOfFate\Weapon_B-N84Golden.jpg" />
<Content Include="graphics\ResonanceOfFate\Weapon_LP-09.jpg" />
<Content Include="graphics\ResonanceOfFate\Weapon_MI50A.jpg" />
<Content Include="graphics\ResonanceOfFate\Weapon_NP.05C.jpg" />
<Content Include="graphics\ResonanceOfFate\Weapon_NP.05Golden.jpg" />
<Content Include="graphics\ResonanceOfFate\Weapon_PDW-XN.V2.jpg" />
<Content Include="graphics\ResonanceOfFate\Weapon_PDW-XN.V3.jpg" />
<Content Include="graphics\ResonanceOfFate\Weapon_SG-B226.jpg" />
<Content Include="graphics\ResonanceOfFate\Weapon_SG-B226Golden.jpg" />
<Content Include="graphics\ResonanceOfFate\Weapon_SMG-05.jpg" />
<Content Include="graphics\ResonanceOfFate\Weapon_Z-40.jpg" />
<Content Include="graphics\samurize\Config-Windows7Laptop.png" />
<Content Include="graphics\samurize\Config-Windows7Pc.png" />
<Content Include="graphics\samurize\Config-WindowsXpPc.png" />
<Content Include="graphics\samurize\Config-WindowsXpPc_Work.png" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall01.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall02.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall03.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall04.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall05.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall06.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall07.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall08.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall09.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall10.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall11.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall12.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall13.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall14.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall15.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall16.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall17.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall18.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall19.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall20.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall21.jpg" />
<Content Include="graphics\sqlServerExpress\SQLServer2008ExpressInstall22.jpg" />
<Content Include="graphics\subversion\subversion_1.4.6_install_01.jpg" />
<Content Include="graphics\subversion\subversion_1.4.6_install_02.jpg" />
<Content Include="graphics\subversion\subversion_1.4.6_install_03.jpg" />
<Content Include="graphics\subversion\subversion_1.4.6_install_04.jpg" />
<Content Include="graphics\subversion\subversion_1.4.6_install_05.jpg" />
<Content Include="graphics\subversion\subversion_1.4.6_install_06.jpg" />
<Content Include="graphics\subversion\subversion_1.4.6_install_07.jpg" />
<Content Include="graphics\subversion\subversion_1.4.6_install_08.jpg" />
<Content Include="graphics\subversion\subversion_1.4.6_install_09.jpg" />
<Content Include="graphics\svn_web\RepoCheckout_DNDMU.jpg" />
<Content Include="graphics\tortoisesvn\tortoisesvn_1.4.8_install_01.jpg" />
<Content Include="graphics\tortoisesvn\tortoisesvn_1.4.8_install_02.jpg" />
<Content Include="graphics\tortoisesvn\tortoisesvn_1.4.8_install_03.jpg" />
<Content Include="graphics\tortoisesvn\tortoisesvn_1.4.8_install_04.jpg" />
<Content Include="graphics\tortoisesvn\tortoisesvn_1.4.8_install_05.jpg" />
<Content Include="graphics\tortoisesvn\tortoisesvn_1.4.8_install_06.jpg" />
<Content Include="graphics\tortoisesvn\tortoisesvn_1.6.3_install_01.jpg" />
<Content Include="graphics\tortoisesvn\tortoisesvn_1.6.3_install_02.jpg" />
<Content Include="graphics\tortoisesvn\tortoisesvn_1.6.3_install_03.jpg" />
<Content Include="graphics\tortoisesvn\tortoisesvn_1.6.3_install_04.jpg" />
<Content Include="graphics\tortoisesvn\tortoisesvn_1.6.3_install_05.jpg" />
<Content Include="graphics\tortoisesvn\tortoisesvn_1.6.3_install_06.jpg" />
<Content Include="graphics\tortoisesvn\tortoisesvn_1.6.3_install_07.jpg" />
<Content Include="graphics\w3c_newspaper.png" />
<Content Include="graphics\wakingLife\WakingLife_01_1.jpg" />
<Content Include="graphics\wakingLife\WakingLife_01_1_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_02_1.jpg" />
<Content Include="graphics\wakingLife\WakingLife_02_1_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_02_linklater_head.jpg" />
<Content Include="graphics\wakingLife\WakingLife_02_linklater_head_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_03_1.jpg" />
<Content Include="graphics\wakingLife\WakingLife_03_1_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_03_2.jpg" />
<Content Include="graphics\wakingLife\WakingLife_03_2_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_04_1.jpg" />
<Content Include="graphics\wakingLife\WakingLife_04_1_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_05_1.jpg" />
<Content Include="graphics\wakingLife\WakingLife_05_1_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_05_2.jpg" />
<Content Include="graphics\wakingLife\WakingLife_05_2_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_06_1.jpg" />
<Content Include="graphics\wakingLife\WakingLife_06_1_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_07_1.jpg" />
<Content Include="graphics\wakingLife\WakingLife_07_1_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_08_1.jpg" />
<Content Include="graphics\wakingLife\WakingLife_08_1_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_09_1.jpg" />
<Content Include="graphics\wakingLife\WakingLife_09_1_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_10_1.jpg" />
<Content Include="graphics\wakingLife\WakingLife_10_1_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_11_1.jpg" />
<Content Include="graphics\wakingLife\WakingLife_11_1_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_12_1.jpg" />
<Content Include="graphics\wakingLife\WakingLife_12_1_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_13_1.jpg" />
<Content Include="graphics\wakingLife\WakingLife_13_1_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_14_1.jpg" />
<Content Include="graphics\wakingLife\WakingLife_14_1_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_15_1.jpg" />
<Content Include="graphics\wakingLife\WakingLife_15_1_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_16_1.jpg" />
<Content Include="graphics\wakingLife\WakingLife_16_1_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_17_1.jpg" />
<Content Include="graphics\wakingLife\WakingLife_17_1_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_18_1.jpg" />
<Content Include="graphics\wakingLife\WakingLife_18_1_t.jpg" />
<Content Include="graphics\wakingLife\WakingLife_19_1.jpg" />
<Content Include="graphics\wakingLife\WakingLife_19_1_t.jpg" />
<Content Include="graphics\windowsServer2003\server2003Roles_01.jpg" />
<Content Include="graphics\windowsServer2003\server2003Roles_02.jpg" />
<Content Include="graphics\windowsServer2003\server2003Roles_03.jpg" />
<Content Include="graphics\windowsServer2003\server2003Roles_04.jpg" />
<Content Include="graphics\windowsServer2003\webPlatformInstaller_WordPress_01.jpg" />
<Content Include="graphics\windowsServer2003\webPlatformInstaller_WordPress_02.jpg" />
<Content Include="graphics\windowsServer2003\webPlatformInstaller_WordPress_03.jpg" />
<Content Include="graphics\windowsServer2003\webPlatformInstaller_WordPress_04.jpg" />
<Content Include="graphics\windowsServer2003\webPlatformInstaller_WordPress_05.jpg" />
<Content Include="graphics\windowsServer2003\webPlatformInstaller_WordPress_06.jpg" />
<Content Include="graphics\windowsServer2003\webPlatformInstaller_WordPress_07.jpg" />
<Content Include="graphics\windowsServer2003\webPlatformInstaller_WordPress_08.jpg" />
<Content Include="graphics\windowsServer2003\webPlatformInstaller_WordPress_09.jpg" />
<Content Include="graphics\windowsServer2003\webPlatformInstaller_WordPress_10.jpg" />
<Content Include="graphics\windowsServer2003\webPlatformInstaller_WordPress_11.jpg" />
<Content Include="graphics\windowsServer2003\webPlatformInstaller_WordPress_12.jpg" />
<Content Include="graphics\windowsServer2003\webPlatformInstaller_WordPress_12b.jpg" />
<Content Include="graphics\windowsServer2003\webPlatformInstaller_WordPress_13.jpg" />
<Content Include="graphics\windowsServer2003\webPlatformInstaller_WordPress_14.jpg" />
<Content Include="graphics\windowsServer2003\webPlatformInstaller_WordPress_15.jpg" />
<Content Include="graphics\windowsServer2003\webPlatformInstaller_WordPress_16.jpg" />
<Content Include="graphics\windowsServer2003\webPlatformInstaller_WordPress_17.jpg" />
<Content Include="graphics\windowsServer2003\webPlatformInstaller_WordPress_18.jpg" />
<Content Include="js\BrowserCheck.js" />
<Content Include="js\common.js" />
<Content Include="js\common.min.js" />
<Content Include="js\JamesRSkemp.min.js" />
<Content Include="js\JamesRSkemp.js" />
<Content Include="js\jquery-1.5.2.min.js" />
<Content Include="js\jquery.xml2json-1.0.min.js" />
<Content Include="js\jquery-1.3.2.js" />
<Content Include="js\jquery-1.3.2.min.js" />
<Content Include="js\jquery-1.4.2.js" />
<Content Include="js\jquery-1.4.2.min.js" />
<Content Include="js\jquery-1.5.1.min.js" />
<Content Include="js\jquery-vsdoc.js" />
<Content Include="js\jquery.beautyOfCode-0.1.js" />
<Content Include="js\jquery.beautyOfCode-0.1.min.js" />
<Content Include="js\jquery.xml2json-1.0.js" />
<Content Include="js\ResonanceOfFate.js" />
<Content Include="js\shBrushLogParser.js" />
<Content Include="js\userscripts\GameTrailers.user.js" />
<Content Include="js\_README.txt" />
<Content Include="AppManager.html" />
<Content Include="robots.txt" />
<Content Include="Web.config">
<SubType>Designer</SubType>
</Content>
<Content Include="Web.Debug.config">
<DependentUpon>Web.config</DependentUpon>
</Content>
<Content Include="Web.Release.config">
<DependentUpon>Web.config</DependentUpon>
</Content>
<Content Include="xmlHtml\ResonanceOfFate.html" />
<Content Include="xmlHtml\vehicle_gas.html" />
<Content Include="xmlHtml\video_games.html" />
<Content Include="xml\BlueDragonSkills.xml" />
<Content Include="xml\CrisisCoreFinalFantasy7.xml" />
<Content Include="xml\CrossEdgeSkills.xml" />
<Content Include="xml\DisgaeaHourOfDarkness.xml" />
<Content Include="xml\domain_names.xml" />
<Content Include="xml\dq8_levels.xml" />
<Content Include="xml\folklore_levels.xml" />
<Content Include="xml\KingdomHeartsBirthBySleep.xml" />
<Content Include="xml\MuramasaBlades.xml" />
<Content Include="xml\music.xml" />
<Content Include="xml\MyBooks.xml" />
<Content Include="xml\MyCDs.xml" />
<Content Include="xml\OdinSphere.xml" />
<Content Include="xml\OnimushaDawnOfDreams.xml" />
<Content Include="xml\Photos.xml" />
<Content Include="xml\ResonanceOfFate.xml" />
<Content Include="xml\samples\iTunesPlaylistsToXml_Example_1.xml" />
<Content Include="xml\samples\iTunesPlaylistsToXml_Example_2.xml" />
<Content Include="xml\samples\iTunesPlaylistsToXml_Example_3.xml" />
<Content Include="xml\ShadowHeartsCovenant.xml" />
<Content Include="xml\ShadowHeartsFromTheNewWorld.xml" />
<Content Include="xml\vehicle_gas.xml" />
<Content Include="xml\VideoGames.xml" />
<Content Include="xml\video_games.xml" />
<Content Include="xslt\AlbumName.xslt" />
<Content Include="xslt\Artist-Album-Genre.xslt" />
<Content Include="xslt\BlueDragonSkills.xsl" />
<Content Include="xslt\DisgaeaHourOfDarkness.xsl" />
<Content Include="xslt\dq8_levels.xsl" />
<Content Include="xslt\folklore_levels.xsl" />
<Content Include="xslt\iTunesPlaylists2Xml.xslt" />
<Content Include="xslt\MuramasaBlades.xsl" />
<Content Include="xslt\MyBooks.xslt" />
<Content Include="xslt\MyCDs.xslt" />
<Content Include="xslt\NameArtistAlbumPlay.xslt" />
<Content Include="xslt\ResonanceOfFate.xsl" />
<Content Include="xslt\SimpleJournal.xsl" />
<Content Include="xslt\vehicle_gas.xslt" />
<Content Include="xslt\video_games.xslt" />
<Content Include="xslt\XmlPhotoGallery.xsl" />
</ItemGroup>
<ItemGroup>
<Compile Include="Handlers\VehicleGasChart.ashx.cs">
<DependentUpon>VehicleGasChart.ashx</DependentUpon>
</Compile>
<Compile Include="FormulasService.cs" />
<Compile Include="MusicService.cs" />
<Compile Include="Service1.cs" />
<Compile Include="SampleItem.cs" />
<Compile Include="Global.asax.cs">
<DependentUpon>Global.asax</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="js\syntaxhighlighter_2.0.320\scripts\" />
</ItemGroup>
<ItemGroup>
<Content Include="downloads\Cassini-v4r4.zip" />
<Content Include="downloads\Cassini_3.5.0.2.zip" />
<Content Include="downloads\IISLogsToSQLite_0.1.zip" />
<Content Include="downloads\iTunesApplication.zip" />
<Content Include="downloads\iTunesMusicToSQLite_0.1.zip" />
<Content Include="downloads\iTunesPlaylistsToXml_0.2b.zip" />
<Content Include="downloads\iTunesPlaylistsToXml_0.3b.zip" />
<Content Include="downloads\iTunesPlaylistsToXml_0.4b.zip" />
<Content Include="downloads\iTunesPlaylistsToXml_0.5b.zip" />
<Content Include="downloads\iTunesPlaylistsToXml_0.6b.zip" />
<Content Include="downloads\iTunesPlaylistsToXml_1.0.zip" />
<Content Include="downloads\iTunesPlaylistsToXml_1.1.1.zip" />
<Content Include="downloads\iTunesPlaylistsToXml_1.1.zip" />
<Content Include="downloads\iTunesPlaylistsToXml_1.2.zip" />
<Content Include="downloads\iTunesPlaylistsToXml_1.3.zip" />
<Content Include="downloads\iTunesPlaylistsToXml_1.4.1.zip" />
<Content Include="downloads\iTunesPlaylistsToXml_1.4.zip" />
<Content Include="downloads\iTunesPlaylistsToXml_1.5.1.zip" />
<Content Include="downloads\iTunesPlaylistsToXml_1.5.2.1.zip" />
<Content Include="downloads\iTunesPlaylistsToXml_1.5.2.zip" />
<Content Include="downloads\iTunesPlaylistsToXml_1.5.3.zip" />
<Content Include="downloads\iTunesPlaylistsToXml_1.5.zip" />
<Content Include="downloads\iTunesPlaylistsToXml_1.6.zip" />
<Content Include="downloads\LogParserPlus_0.2.1.zip" />
<Content Include="downloads\LogParserPlus_0.3.1.zip" />
<Content Include="downloads\LogParserPlus_0.3.zip" />
<Content Include="downloads\MusicRecommendationsPlease_0.4.5.zip" />
<Content Include="downloads\MusicRecommendationsPlease_0.5.zip" />
<Content Include="downloads\NorthwindExamplesDump_rev25.zip" />
<Content Include="downloads\NorthwindExamplesExport_rev25.zip" />
<Content Include="downloads\SimpleJournal_1.0.zip" />
<None Include="downloads\TestBlogEngine.7z" />
<None Include="dtd\domain_names.dtd" />
<None Include="dtd\vehicle_gas.dtd" />
<None Include="dtd\video_games.dtd" />
<Content Include="Handlers\VehicleGasChart.ashx" />
<Content Include="manifest\generic.manifest" />
<Content Include="manifest\web.config" />
<Content Include="manifest\vehicle_gas.manifest" />
<None Include="manifest\media.manifest" />
<None Include="xml\books I still own.linq" />
<None Include="xml\CrisisCoreFinalFantasy7.linq" />
<None Include="xml\KingdomHeartsBirthBySleep counts.linq" />
<None Include="xml\KingdomHeartsBirthBySleep queries.linq" />
<None Include="xml\vehicle parsing.linq" />
<None Include="xml\video games - simple list.linq" />
<None Include="xsd\2010\09\03\OnimushaDawnOfDreams.xsd">
<SubType>Designer</SubType>
</None>
<None Include="xsd\2010\09\04\CustomDateType.xsd">
<SubType>Designer</SubType>
</None>
<None Include="xsd\2010\09\04\VideoGames.xsd">
<SubType>Designer</SubType>
</None>
<None Include="xsd\2010\09\06\ShadowHeartsCovenant.xsd">
<SubType>Designer</SubType>
</None>
<None Include="xsd\2010\10\ShadowHeartsFromTheNewWorld.xsd">
<SubType>Designer</SubType>
</None>
<None Include="xsd\2010\11\16\CrisisCoreFinalFantasy7.xsd">
<SubType>Designer</SubType>
</None>
<None Include="xsd\2010\12\12\VideoGames.xsd">
<SubType>Designer</SubType>
</None>
<None Include="xsd\2011\01\KingdomHeartsBirthBySleep.xsd">
<SubType>Designer</SubType>
</None>
<None Include="xsd\BlueDragonSkills.xsd">
<SubType>Designer</SubType>
</None>
<None Include="xsd\dq8_levels.xsd">
<SubType>Designer</SubType>
</None>
<None Include="xsd\folklore_levels.xsd">
<SubType>Designer</SubType>
</None>
<None Include="xsd\iTunesPlaylistsToXml.xsd">
<SubType>Designer</SubType>
</None>
<None Include="xsd\JournalSimple.xsd">
<SubType>Designer</SubType>
</None>
<None Include="xsd\MyBooks.xsd">
<SubType>Designer</SubType>
</None>
<None Include="xsd\MyCDs.xsd">
<SubType>Designer</SubType>
</None>
<None Include="xsd\OdinSphere.xsd">
<SubType>Designer</SubType>
</None>
<None Include="xsd\ResonanceOfFate.xsd">
<SubType>Designer</SubType>
</None>
<None Include="xsd\ShadowHeartsFromTheNewWorld1.xsd">
<SubType>Designer</SubType>
</None>
<None Include="xsd\vehicle_gas.xsd">
<SubType>Designer</SubType>
</None>
<None Include="xsd\XmlPhotoGallery.xsd">
<SubType>Designer</SubType>
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\JamesRSkemp.Formulas\JamesRSkemp.Formulas.csproj">
<Project>{3C5C809D-43AA-4188-A58A-9E8F420A9271}</Project>
<Name>JamesRSkemp.Formulas</Name>
</ProjectReference>
<ProjectReference Include="..\JamesRSkemp.Music\JamesRSkemp.Music.csproj">
<Project>{F5660A07-192A-4F5C-8A64-7D301BAA7C1A}</Project>
<Name>JamesRSkemp.Music</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
<WebProjectProperties>
<UseIIS>False</UseIIS>
<AutoAssignPort>True</AutoAssignPort>
<DevelopmentServerPort>49227</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>
<IISUrl>http://localhost:49227/</IISUrl>
<NTLMAuthentication>False</NTLMAuthentication>
<UseCustomServer>False</UseCustomServer>
<CustomServerUrl>
</CustomServerUrl>
<SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
</WebProjectProperties>
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

343
MusicService.cs Normal file
View File

@ -0,0 +1,343 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Text;
using JamesRSkemp.Music;
using System.Web.Hosting;
using System.Configuration;
using System.ComponentModel;
using System.Web;
namespace JamesRSkemp.Media.Web {
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[JavascriptCallbackBehavior(UrlParameterName = "callback")]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class MusicService {
/// <summary>
/// Full path to the Xml file to use for data.
/// </summary>
String musicXml = HostingEnvironment.MapPath(ConfigurationManager.AppSettings["musicXmlLocation"].ToString());
/*
New items to create:
return tracks never played
currently part of Plays, but shouldn't be - Plays should change to different method
return tracks with a particular title
verify plays ordering is okay
either tweaks Plays/Date to allow for basing this on the last track's play date, or create new method to do so (instead of by today)
items currently don't sort, but should
data should be cached if possible - see how it impacts memory and performance (the latter is pretty quick)
*/
[WebGet(UriTemplate = "Testing/ReturnText/{text}")]
[Description("Return whatever text is passed.")]
public String ReturnText(String text) {
return text;
}
#region Xml Information
[WebGet(UriTemplate = "Data/UpdateDate")]
[Description("Get the date and time the data was last updated.")]
public String GetFileDate() {
return Track.GetUpdateDate(musicXml).ToString();
}
#endregion
#region Artists
[WebGet(UriTemplate = "Artists")]
[Description("Get a listing of artists, and a count of tracks by them.")]
public List<ArtistCount> GetArtists() {
return Track.GetTracks(musicXml).GroupBy(t => t.Artist).Select(t => new ArtistCount { Artist = t.Key, Count = t.Count() }).OrderBy(t => t.Artist).ToList();
}
/// <summary>
/// Gets a listing of tracks by a particular artist.
/// </summary>
/// <param name="artist">Exact name of the artist to return tracks for.</param>
/// <returns>List of Track by particular artist.</returns>
[WebGet(UriTemplate = "Artists/{artist}")]
[Description("Get a listing of tracks by a particular artist.")]
public List<Track> GetArtistTracks(String artist) {
return Track.GetTracks(musicXml).Where(t => t.Artist == artist).ToList();
}
[WebGet(UriTemplate = "Artists/{artist}/Ratings")]
[Description("Get all ratings used for a particular artist.")]
public List<RatingCount> GetArtistRatings(String artist) {
return GetArtistTracks(artist).Where(t => t.Rating != null).GroupBy(t => t.Rating).Select(t => new RatingCount { Rating = (t.Key ?? 0), Count = t.Count() }).OrderByDescending(t => t.Rating).ToList();
}
[WebGet(UriTemplate = "Artists/{artist}/Ratings/{rating}")]
[Description("Get a listing of tracks by a particular artist, that have been given a particular rating.")]
public List<Track> GetArtistRatingTracks(String artist, String rating) {
return GetArtistTracks(artist).Where(t => t.Rating == int.Parse(rating)).ToList();
}
[WebGet(UriTemplate = "Artists/{artist}/Albums")]
[Description("Get a listing of albums, with counts, for a particular artist.")]
public List<AlbumCount> GetArtistsAlbums(String artist) {
return GetArtistTracks(artist).GroupBy(t => t.Album).Select(t => new AlbumCount { Album = t.Key.TrimEnd(), Count = t.Count() }).ToList();
}
[WebGet(UriTemplate = "Artists/{artist}/Albums/{album}")]
[Description("Get a listing of tracks for a particular album, by a particular artist.")]
public List<Track> GetArtistsAlbumTracks(String artist, String album) {
return GetArtistTracks(artist).Where(t => t.Album.TrimEnd() == album).ToList();
}
#endregion
#region Albums
[WebGet(UriTemplate = "Albums")]
[Description("Get a listing of albums, with a count of tracks.")]
public List<AlbumCount> GetAlbums() {
return Track.GetTracks(musicXml).GroupBy(t => t.Album).Select(t => new AlbumCount { Album = t.Key, Count = t.Count() }).ToList();
}
[WebGet(UriTemplate = "Albums/{album}")]
[Description("Get a listing of tracks for a particular album.")]
public List<Track> GetAlbumTracks(String album) {
return Track.GetTracks(musicXml).Where(t => t.Album.TrimEnd() == album).ToList();
}
[WebGet(UriTemplate = "Albums?album={album}")]
[Description("Get a listing of tracks for a particular album.")]
public List<Track> GetAlbumTracksQueryString(String album) {
album = HttpUtility.UrlDecode(album);
return Track.GetTracks(musicXml).Where(t => t.Album == album).ToList();
}
#endregion
#region Ratings
[WebGet(UriTemplate = "Ratings")]
[Description("Get a listing of ratings, with the number of tracks with that rating.")]
public List<RatingCount> GetRatings() {
return Track.GetTracks(musicXml).GroupBy(t => t.Rating).Select(t => new RatingCount { Rating = (t.Key ?? 0), Count = t.Count() }).OrderByDescending(t => t.Rating).ToList();
}
[WebGet(UriTemplate = "Ratings/{rating}")]
[Description("Get a listing of tracks with a particular rating. Returns a maximum of 1000 tracks.")]
public List<Track> GetRatingTracks(String rating) {
return Track.GetTracks(musicXml).Where(t => t.Rating == int.Parse(rating)).Take(1000).ToList();
}
[WebGet(UriTemplate = "Ratings/{rating}/{page}")]
[Description("Get a listing of tracks with a particular rating. Returns 1000 records per page.")]
public List<Track> GetRatingTracksPaged(String rating, String page) {
return Track.GetTracks(musicXml).Where(t => t.Rating == int.Parse(rating)).Skip((int.Parse(page) - 1) * 1000).Take(1000).ToList();
}
#endregion
#region Added
[WebGet(UriTemplate = "Added/{year}")]
[Description("Get a listing of tracks that were last played in a particular year.")]
public List<Track> GetTracksAddedYear(String year) {
return Track.GetTracks(musicXml).Where(t => t.DateAdded != null && ((DateTime)t.DateAdded).Year == int.Parse(year)).OrderByDescending(t => t.DateAdded).ToList();
}
[WebGet(UriTemplate = "Added/{year}/{month}")]
[Description("Get a listing of tracks that were last played in a particular year and month.")]
public List<Track> GetTracksAddedYearMonth(String year, String month) {
return GetTracksAddedYear(year).Where(t => t.DateAdded != null && ((DateTime)t.DateAdded).Month == int.Parse(month)).OrderByDescending(t => t.DateAdded).ToList();
}
#endregion
#region Genres
[WebGet(UriTemplate = "Genres")]
[Description("Get a listing of music genres, with the number of tracks given that genre.")]
public List<GenreCount> GetGenres() {
return Track.GetTracks(musicXml).GroupBy(t => t.Genre).Select(t => new GenreCount { Genre = t.Key, Count = t.Count() }).OrderBy(t => t.Genre).ToList();
}
[WebGet(UriTemplate = "Genres/{genre}")]
[Description("Get a listing of tracks in a particular genre.")]
public List<Track> GetGenreTracks(String genre) {
return Track.GetTracks(musicXml).Where(t => t.Genre == genre).ToList();
}
#endregion
#region Played
[WebGet(UriTemplate = "Played/{year}")]
[Description("Get a listing of tracks that were last played in a particular year.")]
public List<Track> GetTracksPlayedYear(String year) {
return Track.GetTracks(musicXml).Where(t => t.LastPlayed != null && ((DateTime)t.LastPlayed).Year == int.Parse(year)).OrderByDescending(t => t.LastPlayed).ToList();
}
[WebGet(UriTemplate = "Played/{year}/{month}")]
[Description("Get a listing of tracks that were last played in a particular year and month.")]
public List<Track> GetTracksPlayedYearMonth(String year, String month) {
return GetTracksPlayedYear(year).Where(t => t.LastPlayed != null && ((DateTime)t.LastPlayed).Month == int.Parse(month)).OrderByDescending(t => t.LastPlayed).ToList();
}
#endregion
#region Plays
[WebGet(UriTemplate = "Plays/Count/{count}")]
[Description("Get the last x tracks played, ordered by the last date played.")]
public List<Track> GetTracksPlayedLast(String count) {
return Track.GetTracks(musicXml).OrderByDescending(t => t.LastPlayed).Take(int.Parse(count)).ToList();
}
[WebGet(UriTemplate = "Plays/Date/{days}")]
[Description("Get a listing of tracks, ordered by the last date played, over the last x days.")]
public List<Track> GetTracksByPlayDate(String days) {
return Track.GetTracks(musicXml).Where(t => t.LastPlayed >= DateTime.Now.AddDays(-int.Parse(days))).OrderByDescending(t => t.LastPlayed).ToList();
}
[WebGet(UriTemplate = "Plays/Track/{count}")]
[Description("Get a listing of x tracks, ordered by the number of times if was played.")]
public List<Track> GetTracksByPlays(String count) {
if (count.ToLower() == "never") {
return Track.GetTracks(musicXml).Where(t => t.PlayCount == 0).ToList();
} else {
return Track.GetTracks(musicXml).OrderByDescending(t => t.PlayCount).Take(int.Parse(count)).ToList();
}
}
#endregion
#region Years
[WebGet(UriTemplate = "Years")]
[Description("Get a listing of years of tracks, with the number of tracks with that year.")]
public List<YearCount> GetYears() {
return Track.GetTracks(musicXml).GroupBy(t => t.Year).Select(t => new YearCount { Year = (t.Key ?? 0), Count = t.Count() }).OrderByDescending(t => t.Year).ToList();
}
[WebGet(UriTemplate = "Years/{year}")]
[Description("Get a listing of tracks released in a particular year.")]
public List<Track> GetYearsTracks(String year) {
return Track.GetTracks(musicXml).Where(t => t.Year == int.Parse(year)).ToList();
}
#endregion
#region Track titles
[WebGet(UriTemplate = "Titles?title={title}&album={album}&artist={artist}")]
[Description("Get a listing of tracks with a particular title/name, and album and/or artist.")]
public List<Track> GetTracksQueryString(String title, String album, String artist) {
//title = System.Web.HttpUtility.UrlDecode(title);
//album = System.Web.HttpUtility.UrlDecode(album);
//artist = System.Web.HttpUtility.UrlDecode(artist);
if (String.IsNullOrWhiteSpace(title)) {
throw new WebFaultException(System.Net.HttpStatusCode.NotImplemented);
} else if (String.IsNullOrWhiteSpace(album) && String.IsNullOrWhiteSpace(artist)) {
return GetTitleTracks(title);
} else if (String.IsNullOrWhiteSpace(album)) {
return GetTitleArtistTracks(title, artist);
} else if (String.IsNullOrWhiteSpace(artist)) {
return GetTitleAlbumTracks(title, album);
} else {
return Track.GetTracks(musicXml).Where(t => t.Name == title && t.Album == album && t.Artist == artist).ToList();
}
}
[WebGet(UriTemplate = "Titles/{title}")]
[Description("Get a listing of tracks with a particular title/name.")]
public List<Track> GetTitleTracks(String title) {
return Track.GetTracks(musicXml).Where(t => t.Name == title).ToList();
}
[WebGet(UriTemplate = "Titles/{title}/Albums/{album}")]
[Description("Get a listing of tracks with a particular title/name, from a particular album.")]
public List<Track> GetTitleAlbumTracks(String title, String album) {
return Track.GetTracks(musicXml).Where(t => t.Name == title && t.Album == album).ToList();
}
[WebGet(UriTemplate = "Titles/{title}/Artists/{artist}")]
[Description("Get a listing of tracks with a particular title/name, by a particular artist.")]
public List<Track> GetTitleArtistTracks(String title, String artist) {
return Track.GetTracks(musicXml).Where(t => t.Name == title && t.Artist == artist).ToList();
}
/*
TODO:
/Titles
/Titles/{title}/Albums
/Titles/{title}/Artists
/Titles/?title={title}&album={album}&artist={artist} (and just check for those that aren't defined?)
*/
#endregion
#region Custom objects returned by methods.
/// <summary>
/// Artist name with a count of tracks by that artist.
/// </summary>
public class ArtistCount {
/// <summary>
/// Name of an artist.
/// </summary>
public String Artist { get; set; }
/// <summary>
/// Tracks by the artist.
/// </summary>
public int Count { get; set; }
}
/// <summary>
/// Album name with a count of tracks in it, across all discs.
/// </summary>
public class AlbumCount {
/// <summary>
/// Name of the album.
/// </summary>
public String Album { get; set; }
/// <summary>
/// Total number of tracks in the album, across all discs.
/// </summary>
public int Count { get; set; }
}
/// <summary>
/// Genre with a count of tracks assigned it.
/// </summary>
public class GenreCount {
/// <summary>
/// Name of the genre.
/// </summary>
public String Genre { get; set; }
/// <summary>
/// Tracks of this genre.
/// </summary>
public int Count { get; set; }
}
/// <summary>
/// Rating value with a count of tracks using that rating.
/// </summary>
public class RatingCount {
/// <summary>
/// Rating between 0 and 5, inclusive.
/// </summary>
public int Rating { get; set; }
/// <summary>
/// Number of tracks with that rating.
/// </summary>
public int Count { get; set; }
}
/// <summary>
/// Four digit years with a count of tracks released that year.
/// </summary>
public class YearCount {
/// <summary>
/// Four digit year of track or album the track is on.
/// </summary>
public int Year { get; set; }
/// <summary>
/// Number of tracks released that year.
/// </summary>
public int Count { get; set; }
}
#endregion
}
}

View File

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("JamesRSkemp.Media.Web")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("JamesRSkemp.Media.Web")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2011")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("11fb24f1-43e3-4801-a380-6127d7c4b0aa")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

13
SampleItem.cs Normal file
View File

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
namespace JamesRSkemp.Media.Web {
// TODO: Edit the SampleItem class
public class SampleItem {
public int Id { get; set; }
public string StringValue { get; set; }
}
}

51
Service1.cs Normal file
View File

@ -0,0 +1,51 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Text;
namespace JamesRSkemp.Media.Web {
// Start the service and browse to http://<machine_name>:<port>/Service1/help to view the service's generated help page
// NOTE: By default, a new instance of the service is created for each call; change the InstanceContextMode to Single if you want
// a single instance of the service to process all calls.
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
// NOTE: If the service is renamed, remember to update the global.asax.cs file
public class Service1 {
// TODO: Implement the collection resource that will contain the SampleItem instances
[WebGet(UriTemplate = "")]
public List<SampleItem> GetCollection() {
// TODO: Replace the current implementation to return a collection of SampleItem instances
return new List<SampleItem>() { new SampleItem() { Id = 1, StringValue = "Hello" } };
}
[WebInvoke(UriTemplate = "", Method = "POST")]
public SampleItem Create(SampleItem instance) {
// TODO: Add the new instance of SampleItem to the collection
throw new NotImplementedException();
}
[WebGet(UriTemplate = "{id}")]
public SampleItem Get(string id) {
// TODO: Return the instance of SampleItem with the given id
throw new NotImplementedException();
}
[WebInvoke(UriTemplate = "{id}", Method = "PUT")]
public SampleItem Update(string id, SampleItem instance) {
// TODO: Update the given instance of SampleItem in the collection
throw new NotImplementedException();
}
[WebInvoke(UriTemplate = "{id}", Method = "DELETE")]
public void Delete(string id) {
// TODO: Remove the instance of SampleItem with the given id from the collection
throw new NotImplementedException();
}
}
}

7
Web.Debug.config Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0"?>
<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
</configuration>

11
Web.Release.config Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0"?>
<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>
</configuration>

52
Web.config Normal file
View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appSettings>
<add key="musicXmlLocation" value="~/App_Data/playlistXml.xml"/>
</appSettings>
<system.web>
<customErrors mode="RemoteOnly"/>
<httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters=""/>
<compilation debug="true" targetFramework="4.0" />
<authentication mode="None"/>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</modules>
<rewrite>
<rules>
<rule name="CanonicalHostNameRule1">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^media\.jamesrskemp\.com$" negate="true" />
</conditions>
<action type="Redirect" url="http://media.jamesrskemp.com/{R:1}" />
</rule>
</rules>
</rewrite>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" />
</staticContent>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
<standardEndpoints>
<webHttpEndpoint>
<!--
Configure the WCF REST service base address via the global.asax.cs file and the default endpoint
via the attributes on the <standardEndpoint> element below
-->
<!-- Required for JSONP -->
<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" defaultOutgoingResponseFormat="Json" crossDomainScriptAccessEnabled="true" />
<!-- Required for localhost -->
<!--<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" />-->
</webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
</configuration>

View File

@ -0,0 +1,76 @@
#Software: Microsoft Internet Information Services 6.0
#Version: 1.0
#Date: 2010-08-05 00:14:46
#Fields: date time c-ip cs-username s-sitename s-computername s-ip s-port cs-method cs-uri-stem cs-uri-query sc-status sc-win32-status sc-bytes cs-bytes time-taken cs-version cs-host cs(User-Agent) cs(Cookie) cs(Referer)
2010-08-05 00:14:46 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [23]USER FTPUser1 - 331 0 0 0 0 FTP - - - -
2010-08-05 00:14:46 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [23]PASS - - 230 0 0 0 0 FTP - - - -
2010-08-05 00:14:56 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [23]CWD Views - 250 0 0 0 0 FTP - - - -
2010-08-05 00:15:00 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [24]USER FTPUser1 - 331 0 0 0 0 FTP - - - -
2010-08-05 00:15:00 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [25]USER FTPUser1 - 331 0 0 0 0 FTP - - - -
2010-08-05 00:15:00 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [24]PASS - - 230 0 0 0 0 FTP - - - -
2010-08-05 00:15:00 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [25]PASS - - 230 0 0 0 0 FTP - - - -
2010-08-05 00:15:00 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [24]CWD /Views - 250 0 0 0 0 FTP - - - -
2010-08-05 00:15:00 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [25]CWD /Views/Ad - 250 0 0 0 0 FTP - - - -
2010-08-05 00:15:05 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [25]created /Views/Ad/Index.aspx - 226 0 0 1166 30 FTP - - - -
2010-08-05 00:15:05 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [24]created /Views/Web.config - 226 0 0 1570 20 FTP - - - -
2010-08-05 00:15:05 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [25]CWD /Views/Branding - 250 0 0 0 0 FTP - - - -
2010-08-05 00:15:05 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [24]CWD /Views/Careers - 250 0 0 0 0 FTP - - - -
2010-08-05 00:15:05 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [24]created /Views/Careers/Index.aspx - 226 0 0 671 10 FTP - - - -
2010-08-05 00:15:05 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [25]created /Views/Branding/Index.aspx - 226 0 0 1163 0 FTP - - - -
2010-08-05 00:15:05 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [24]CWD /Views/Home - 550 2 0 0 0 FTP - - - -
2010-08-05 00:15:05 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [24]CWD /Views - 250 0 0 0 0 FTP - - - -
2010-08-05 00:15:05 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [25]CWD /Views/Menu - 550 2 0 0 0 FTP - - - -
2010-08-05 00:15:05 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [24]MKD Home - 257 0 0 0 0 FTP - - - -
2010-08-05 00:15:05 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [25]CWD /Views - 250 0 0 0 0 FTP - - - -
2010-08-05 00:15:05 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [24]CWD /Views/Home - 250 0 0 0 0 FTP - - - -
2010-08-05 00:15:05 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [25]MKD Menu - 257 0 0 0 0 FTP - - - -
2010-08-05 00:15:05 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [25]CWD /Views/Menu - 250 0 0 0 0 FTP - - - -
2010-08-05 00:15:05 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [24]created /Views/Home/Index.aspx - 226 0 0 6908 10 FTP - - - -
2010-08-05 00:15:05 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [25]created /Views/Menu/Index.aspx - 226 0 0 528 10 FTP - - - -
2010-08-05 00:15:06 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [24]CWD /Views/News - 550 2 0 0 0 FTP - - - -
2010-08-05 00:15:06 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [24]CWD /Views - 250 0 0 0 0 FTP - - - -
2010-08-05 00:15:06 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [25]CWD /Views/Shared - 250 0 0 0 0 FTP - - - -
2010-08-05 00:15:06 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [24]MKD News - 257 0 0 0 0 FTP - - - -
2010-08-05 00:15:06 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [24]CWD /Views/News - 250 0 0 0 0 FTP - - - -
2010-08-05 00:15:06 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [25]created /Views/Shared/Error.aspx - 226 0 0 439 10 FTP - - - -
2010-08-05 00:15:06 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [24]created /Views/News/Index.aspx - 226 0 0 3422 0 FTP - - - -
2010-08-05 00:15:06 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [24]CWD /Views/Survey - 250 0 0 0 0 FTP - - - -
2010-08-05 00:15:06 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [25]created /Views/Shared/Site.Master - 226 0 0 2237 10 FTP - - - -
2010-08-05 00:15:06 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [24]created /Views/Survey/Index.aspx - 226 0 0 643 0 FTP - - - -
2010-08-05 00:15:07 192.168.1.101 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [24]CWD /Views - 250 0 0 0 0 FTP - - - -
2010-08-05 00:15:37 192.168.1.100 FTPUser2 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [26]USER FTPUser2 - 331 0 0 0 0 FTP - - - -
2010-08-05 00:15:37 192.168.1.100 - MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [26]PASS - - 530 1326 0 0 10 FTP - - - -
2010-08-05 00:15:40 192.168.1.100 FTPUser2 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [27]USER FTPUser2 - 331 0 0 0 0 FTP - - - -
2010-08-05 00:15:40 192.168.1.100 - MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [27]PASS - - 530 1326 0 0 0 FTP - - - -
2010-08-05 00:15:43 192.168.1.100 FTPUser2 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [28]USER FTPUser2 - 331 0 0 0 0 FTP - - - -
2010-08-05 00:15:43 192.168.1.100 FTPUser2 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [28]PASS - - 230 0 0 0 10 FTP - - - -
2010-08-05 00:15:51 192.168.1.100 FTPUser2 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [28]DELE MyBooks.xml - 250 0 0 0 0 FTP - - - -
2010-08-05 00:15:51 192.168.1.100 FTPUser2 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [28]DELE MyBooks.xslt - 250 0 0 0 0 FTP - - - -
2010-08-05 00:15:51 192.168.1.100 FTPUser2 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [28]DELE MyCDs.xml - 250 0 0 0 0 FTP - - - -
2010-08-05 00:15:51 192.168.1.100 FTPUser2 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [28]DELE MyCDs.xslt - 250 0 0 0 0 FTP - - - -
2010-08-05 00:15:56 192.168.1.100 FTPUser2 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [29]USER FTPUser2 - 331 0 0 0 0 FTP - - - -
2010-08-05 00:15:56 192.168.1.100 FTPUser2 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [30]USER FTPUser2 - 331 0 0 0 0 FTP - - - -
2010-08-05 00:15:56 192.168.1.100 FTPUser2 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [29]PASS - - 230 0 0 0 10 FTP - - - -
2010-08-05 00:15:56 192.168.1.100 FTPUser2 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [30]PASS - - 230 0 0 0 10 FTP - - - -
2010-08-05 00:15:56 192.168.1.100 FTPUser2 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [29]CWD / - 250 0 0 0 0 FTP - - - -
2010-08-05 00:15:56 192.168.1.100 FTPUser2 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [30]CWD / - 250 0 0 0 0 FTP - - - -
2010-08-05 00:15:56 192.168.1.100 FTPUser2 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [30]created /MyBooks.xslt - 226 0 0 1659 20 FTP - - - -
2010-08-05 00:15:56 192.168.1.100 FTPUser2 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [29]created /MyBooks.xml - 226 0 0 304855 121 FTP - - - -
2010-08-05 00:15:56 192.168.1.100 FTPUser2 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [30]created /MyCDs.xslt - 226 0 0 1175 20 FTP - - - -
2010-08-05 00:15:56 192.168.1.100 FTPUser2 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [29]created /MyCDs.xml - 226 0 0 122719 80 FTP - - - -
2010-08-05 00:18:36 192.168.1.100 FTPUser2 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [31]USER FTPUser2 - 331 0 0 0 0 FTP - - - -
2010-08-05 00:18:36 192.168.1.100 FTPUser2 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [31]PASS - - 230 0 0 0 0 FTP - - - -
2010-08-05 00:18:54 192.168.1.100 FTPUser3 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [32]USER FTPUser3 - 331 0 0 0 0 FTP - - - -
2010-08-05 00:18:54 192.168.1.100 - MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [32]PASS - - 530 1326 0 0 0 FTP - - - -
2010-08-05 00:18:59 192.168.1.100 FTPUser3 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [33]USER FTPUser3 - 331 0 0 0 0 FTP - - - -
2010-08-05 00:18:59 192.168.1.100 - MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [33]PASS - - 530 1326 0 0 0 FTP - - - -
2010-08-05 00:19:01 192.168.1.100 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [34]USER FTPUser1 - 331 0 0 0 0 FTP - - - -
2010-08-05 00:19:01 192.168.1.100 - MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [34]PASS - - 530 1326 0 0 0 FTP - - - -
#Software: Microsoft Internet Information Services 6.0
#Version: 1.0
#Date: 2010-08-05 00:28:01
#Fields: date time c-ip cs-username s-sitename s-computername s-ip s-port cs-method cs-uri-stem cs-uri-query sc-status sc-win32-status sc-bytes cs-bytes time-taken cs-version cs-host cs(User-Agent) cs(Cookie) cs(Referer)
2010-08-05 00:28:01 192.168.1.100 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [35]USER FTPUser1 - 331 0 0 0 0 FTP - - - -
2010-08-05 00:28:01 192.168.1.100 - MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [35]PASS - - 530 1326 0 0 0 FTP - - - -
2010-08-05 00:28:11 192.168.1.100 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [36]USER FTPUser1 - 331 0 0 0 0 FTP - - - -
2010-08-05 00:28:11 192.168.1.100 FTPUser1 MSFTPSVC1 JAMES-WINS03WS1 192.168.1.106 21 [36]PASS - - 230 0 0 0 10 FTP - - - -

View File

@ -0,0 +1,132 @@
/*
Created by James Skemp - http://jamesrskemp.com/
Version 1.0
More information at http://strivinglife.com/words/post/Tutorial-ASPNET-C-sharp-WCF-WebHttp-service-with-jQuery-Part-1-Loan-object.aspx
Shared under a Creative Commons Attribution 3.0 United States License - http://creativecommons.org/licenses/by/3.0/us/
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace JamesRSkemp.Formulas {
public class Amortization {
/// <summary>
/// Loan, with a total amount due, payment amount, number of payments per year, and interest rate per year.
/// </summary>
public class Loan {
/// <summary>
/// Name of the loan.
/// </summary>
public String Name { get; set; }
/// <summary>
/// Total amount due on the loan.
/// </summary>
public Double Total { get; set; }
/// <summary>
/// The amount paid per payment.
/// </summary>
public Double PaymentAmount { get; set; }
/// <summary>
/// The number of payments made per year. Usually 12.
/// </summary>
public int PaymentsPerYear { get; set; }
/// <summary>
/// Percent of interest, per year.
/// </summary>
public Double InterestPerYear { get; set; }
/// <summary>
/// List of individual payments. Only populated/updated by UpdatePayments method.
/// </summary>
public List<Payment> Payments { get; set; }
/// <summary>
/// Creates a new instance of a loan. By default sets the number of payments per year to 12.
/// </summary>
public Loan() {
this.PaymentsPerYear = 12;
}
/// <summary>
/// Updates payments on a loan.
/// </summary>
/// <returns>If payments cannot be updated, returns false.</returns>
public Boolean UpdatePayments() {
Boolean paymentsUpdated = false;
if (this.Payments == null) {
this.Payments = new List<Payment>();
} else {
this.Payments.Clear();
}
// Determine how much interest should be applied per payment.
Double interestPerPayment = (this.InterestPerYear / 100) / this.PaymentsPerYear;
// Store how much we need to pay. In this case, what the first payment will be.
Double periodPaymentAmount = interestPerPayment * this.Total;
if (periodPaymentAmount >= this.PaymentAmount) {
throw new Exception("The amount of interest on the first payment is greater than the amount that will be paid.");
} else {
Double totalRemaining = this.Total;
while (totalRemaining > 0) {
// todo - handle payment > amount due
Payment currentPayment = new Payment();
currentPayment.Total = this.PaymentAmount;
currentPayment.Interest = Math.Round(totalRemaining * interestPerPayment, 2);
currentPayment.Principal = Math.Round(currentPayment.Total - currentPayment.Interest, 2);
currentPayment.LoanRemaining = Math.Round(totalRemaining - currentPayment.Principal, 2);
// If we now have a remaining amount on the loan less than 0, we've paid too much.
if (currentPayment.LoanRemaining < 0) {
currentPayment.Total += currentPayment.LoanRemaining;
currentPayment.Principal += currentPayment.LoanRemaining;
currentPayment.LoanRemaining = 0;
}
this.Payments.Add(currentPayment);
totalRemaining = currentPayment.LoanRemaining;
currentPayment = null;
}
paymentsUpdated = true;
}
return paymentsUpdated;
}
/// <summary>
/// Loan payment.
/// </summary>
public class Payment {
/// <summary>
/// Total payment amount.
/// </summary>
public Double Total { get; set; }
/// <summary>
/// Amount of payment applied to interest.
/// </summary>
public Double Interest { get; set; }
/// <summary>
/// Amount of payment applied to the principal.
/// </summary>
public Double Principal { get; set; }
/// <summary>
/// Amount of the loan remaining after this payment is made.
/// </summary>
public Double LoanRemaining { get; set; }
/// <summary>
/// New loan payment.
/// </summary>
public Payment() {
}
}
}
}
}

View File

@ -0,0 +1,103 @@
/*
Created by James Skemp - http://jamesrskemp.com/
Version 1.0
More information at http://strivinglife.com/words/post/Parsing-Lastfm-Web-Services-artistgetSimilar-with-C-and-LINQ-to-XML.aspx
Shared under a Creative Commons Attribution 3.0 United States License - http://creativecommons.org/licenses/by/3.0/us/
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Data;
using System.Xml.Linq;
namespace JamesRSkemp.WebServices {
class Lastfm {
/// <summary>
/// Key used to access Last.fm Web services.
/// </summary>
private const string LastFmApiKey = "EnterYourApiKeyHere";
/// <summary>
/// Return artists similar to the one passed, with a match percentage.
/// </summary>
/// <param name="artistName">The name of the artist to use for the request.</param>
/// <returns>DataTable with artist names and match percentage, as a Double.</returns>
public DataTable GetSimilarArtists(string artistName) {
if (String.IsNullOrEmpty(artistName)) {
throw new Exception("Artist name must be populated.");
} else {
string requestUrl = GetBaseRequestUrl();
requestUrl += "&method=artist.getSimilar&artist=" + System.Web.HttpUtility.UrlEncode(artistName.Trim());
string serviceResponse = GetServiceResponse(requestUrl);
var xmlResponse = XElement.Parse(serviceResponse);
// Parse through the returned Xml for the name and match value for each similar artist.
var artists = from artistsSimilar in xmlResponse.Descendants("artist")
select new {
name = artistsSimilar.Element("name").Value,
match = artistsSimilar.Element("match").Value
};
DataTable similarArtists = new DataTable();
similarArtists.Columns.Add("Artist");
similarArtists.Columns.Add("Match", System.Type.GetType("System.Double"));
if (artists.Count() > 0) {
DataRow artistsRow;
foreach (var artist in artists) {
artistsRow = similarArtists.NewRow();
artistsRow["Artist"] = artist.name;
artistsRow["Match"] = artist.match;
similarArtists.Rows.Add(artistsRow);
}
}
return similarArtists;
}
}
/// <summary>
/// Get the base Url that we'll use to make Web service requests.
/// </summary>
/// <returns>The base Url to use to make Web service requests.</returns>
private string GetBaseRequestUrl() {
string baseUrl = "http://ws.audioscrobbler.com/2.0/?api_key=" + LastFmApiKey;
return baseUrl;
}
/// <summary>
/// Gets the data from an HTTP request.
/// </summary>
/// <param name="requestUrl">The full Url of the request to make.</param>
/// <returns>Returns a string with the text returned from the request.</returns>
private string GetServiceResponse(string requestUrl) {
string httpResponse = "";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl);
request.Timeout = 15000;
HttpWebResponse response = null;
StreamReader reader = null;
try {
response = (HttpWebResponse)request.GetResponse();
reader = new StreamReader(response.GetResponseStream());
httpResponse = reader.ReadToEnd();
} finally {
if (reader != null) {
reader.Close();
}
if (response != null) {
response.Close();
}
}
return httpResponse;
}
}
}

View File

@ -0,0 +1,101 @@
/*
Created by James Skemp - http://jamesrskemp.com/
Version 1.0
More information at http://strivinglife.com/words/post/Parsing-Yahoo!-Musics-Artist-Web-Services-with-C-and-LINQ-to-XML-Search-for-artists.aspx
Shared under a Creative Commons Attribution 3.0 United States License - http://creativecommons.org/licenses/by/3.0/us/
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Xml.Linq;
using System.Data;
namespace JamesRSkemp.WebServices {
class YahooMusic {
/// <summary>
/// Key used to access Yahoo! Music Web services.
/// </summary>
private string AppId = "";
/// <summary>
/// Create a new YahooMusic object.
/// </summary>
/// <param name="appId">Application ID from Yahoo! Developer Network.</param>
public YahooMusic(string appId) {
if (appId.Trim() != "") {
AppId = appId;
} else {
throw new Exception("You must pass a valid API identifier.");
}
}
/// <summary>
/// Return artists similar to the one passed, with a match percentage.
/// </summary>
/// <param name="artistName">The name of the artist to use for the request.</param>
/// <returns>DataTable with artist names.</returns>
public DataTable GetSimilarArtists(string artistName) {
string requestUrl = "http://us.music.yahooapis.com/artist/v1/list/search/artist/"
+ System.Web.HttpUtility.UrlEncode(artistName.Trim())
+ "?appid=" + AppId + "&response=topsimilar";
string serviceResponse = GetServiceResponse(requestUrl);
var xmlResponse = XElement.Parse(serviceResponse);
var artistsCount = from Artists in xmlResponse.Descendants("TopSimilarArtists").Descendants("Artist")
select new {
name = Artists.Attribute("name").Value
};
DataTable similarArtists = new DataTable();
similarArtists.Columns.Add("Artist");
if (artistsCount.Count() > 0) {
DataRow artistsRow;
foreach (var artist in artistsCount) {
artistsRow = similarArtists.NewRow();
artistsRow["Artist"] = artist.name;
similarArtists.Rows.Add(artistsRow);
}
}
return similarArtists;
}
/// <summary>
/// Gets the data from an HTTP request.
/// </summary>
/// <param name="requestUrl">The full Url of the request to make.</param>
/// <returns>Returns a string with the text returned from the request.</returns>
private string GetServiceResponse(string requestUrl) {
string httpResponse = "";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl);
request.Timeout = 15000;
HttpWebResponse response = null;
StreamReader reader = null;
try {
response = (HttpWebResponse)request.GetResponse();
reader = new StreamReader(response.GetResponseStream());
httpResponse = reader.ReadToEnd();
} finally {
if (reader != null) {
reader.Close();
}
if (response != null) {
response.Close();
}
}
return httpResponse;
}
}
}

View File

@ -0,0 +1,44 @@
label
{
width:150px;
display:block;
padding-right:1em;
float:left;
clear:left;
}
input
{
float:left;
}
button
{
display:block;
float:right;
clear:both;
margin:.5em 0 .25em;
}
#Loan1, #Loan2
{
float:left;
margin-right:1em;
}
#LoanResults
{
clear:both;
}
#Loan1Data, #Loan2Data
{
float:left;
width:45%;
}
.error
{
color:red;
}
/* Remove */
#pulledData
{
float:left;
clear:left;
}

View File

@ -0,0 +1,57 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Example: FormulasService - Loan</title>
<meta name="author" content="James Skemp" />
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<link type="text/css" rel="Stylesheet" href="FormulasService_Loan.css" />
<script type="text/javascript">
window.google_analytics_uacct = "UA-541034-10";
</script>
</head>
<body>
<h1>Example: FormulasService - Loan</h1>
<p>See <a href="http://strivinglife.com/words/post/Tutorial-ASPNET-C-sharp-WCF-WebHttp-service-with-jQuery-Part-3-Pulling-JSON-with-jQuery.aspx" rel="external">Tutorial: ASP.NET (C#) WCF WebHttp service with jQuery: Part 3 - Pulling JSON with jQuery</a> for more information.</p>
<div id="LoanSample"></div>
<div id="Loan1">
<h2>Loan 1</h2>
<p id="Loan1Copy"></p>
<label for="Loan1Name">Name</label><input type="text" id="Loan1Name" name="Loan1Name" value="" /><br />
<label for="Loan1Balance">Balance</label><input type="text" id="Loan1Balance" name="Loan1Balance" value="" /><br />
<label for="Loan1Payment">Payment</label><input type="text" id="Loan1Payment" name="Loan1Payment" value="" /><br />
<label for="Loan1Payments">Yearly payments</label><input type="text" id="Loan1Payments" name="Loan1Payments" value="" /><br />
<label for="Loan1Interest">Interest (%)</label><input type="text" id="Loan1Interest" name="Loan1Interest" value="" /><br />
<button type="button" id="Loan1Submit" disabled="disabled">View payments for this loan</button>
<button type="button" id="Loan1Clear" disabled="disabled">Clear information</button>
</div>
<div id="Loan2">
<h2>Loan 2</h2>
<p id="Loan2Copy"></p>
<label for="Loan2Name">Name</label><input type="text" id="Loan2Name" name="Loan2Name" value="" /><br />
<label for="Loan2Balance">Balance ($)</label><input type="text" id="Loan2Balance" name="Loan2Balance" value="" /><br />
<label for="Loan2Payment">Payment ($)</label><input type="text" id="Loan2Payment" name="Loan2Payment" value="" /><br />
<label for="Loan2Payments">Yearly payments (#)</label><input type="text" id="Loan2Payments" name="Loan2Payments" value="" /><br />
<label for="Loan2Interest">Interest (%)</label><input type="text" id="Loan2Interest" name="Loan2Interest" value="" /><br />
<button type="button" id="Loan2Submit" disabled="disabled">View payments for this loan</button>
<button type="button" id="Loan2Clear" disabled="disabled">Clear information</button>
</div>
<div id="LoanResults">
<div id="Loan1Data">&nbsp;</div>
<div id="Loan2Data">&nbsp;</div>
</div>
<div id="pulledData"></div>
<script type="text/javascript" src="http://media.jamesrskemp.com/js/jquery-1.4.2.min.js"></script>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-541034-10");
pageTracker._initData();
pageTracker._trackPageview();
</script>
<script type="text/javascript" src="FormulasService_Loan.js"></script>
</body>
</html>

View File

@ -0,0 +1,99 @@
if ($) {
/* todo - pass an object, since we're already grabbing values? */
function validateLoan(number) {
if (
(number == 1 || number == 2)
&& ($('#Loan' + number + 'Name').val() != '')
&& ($('#Loan' + number + 'Balance').val() != '')
&& ($('#Loan' + number + 'Payment').val() != '')
&& ($('#Loan' + number + 'Payments').val() != '')
&& ($('#Loan' + number + 'Interest').val() != '')
) {
return true;
}
return false;
}
function sampleLoan() {
$('#Loan1Name').val('Student loan');
$('#Loan1Balance').val('2984.87');
$('#Loan1Payment').val('97.85');
$('#Loan1Payments').val('12');
$('#Loan1Interest').val('4.25');
}
/* todo */
function copyLoan(numberFrom, numberTo) {
if ((numberFrom == 1 || numberFrom == 2) && (numberTo == 1 || numberTo == 2)) {
/* todo - objects? */
$('#Loan' + numberTo + 'Name').val($('#Loan' + numberFrom + 'Name').val());
$('#Loan' + numberTo + 'Balance').val($('#Loan' + numberFrom + 'Balance').val());
$('#Loan' + numberTo + 'Payment').val($('#Loan' + numberFrom + 'Payment').val());
$('#Loan' + numberTo + 'Payments').val($('#Loan' + numberFrom + 'Payments').val());
$('#Loan' + numberTo + 'Interest').val($('#Loan' + numberFrom + 'Interest').val());
}
}
function clearLoan(number) {
if (number == 1 || number == 2) {
var idBase = '#Loan' + number;
$(idBase + 'Name').val('');
$(idBase + 'Balance').val('');
$(idBase + 'Payment').val('');
$(idBase + 'Payments').val('');
$(idBase + 'Interest').val('');
}
}
function generateLoan(number) {
if (validateLoan(number)) {
var loanName = $('#Loan' + number + 'Name').val();
var loanBalance = $('#Loan' + number + 'Balance').val();
var loanPayment = $('#Loan' + number + 'Payment').val();
var loanPayments = $('#Loan' + number + 'Payments').val();
var loanInterest = $('#Loan' + number + 'Interest').val();
$('#Loan' + number + 'Data').html('');
try {
$.ajax({
type: "GET",
url: 'http://services.jamesrskemp.com/FormulasService/Loan?name=' + loanName + '&total=' + loanBalance + '&payment=' + loanPayment + '&yearlyPayments=' + loanPayments + '&yearlyInterest=' + loanInterest + '',
dataType: 'jsonp',
success: function (data) { processData(data, number); },
});
} catch (ex) {
$('#Loan' + number + 'Data').html('<p class="error">Error: ' + ex.Message + '</p>');
}
} else {
$('#Loan' + number + 'Data').html('<p class="error">Please verify the data entered for this loan and re-submit after correcting.</p>');
}
}
function processData(data, loanNumber) {
try {
// JavaScript will go either here - in the *function*
var outputContent = "<h3>Loan " + loanNumber + " payments</h3>";
outputContent += "Loan name: " + data.Name + "<br />";
outputContent += "Starting balance: $" + data.Total + "<br />";
outputContent += "Total payments: " + data.Payments.length + "<br />";
outputContent += "<ol>";
$.each(data.Payments, function (i, payment) { outputContent += '<li>After a payment of <span class="loanPayment">$' + payment.Total.toFixed(2) + '</span>, the remaining amount is <span class="loanRemaining">$' + payment.LoanRemaining.toFixed(2) + '</span></li>'; });
outputContent += "</ol>";
$('#Loan' + loanNumber + 'Data').html(outputContent);
} catch (ex) {
alert("Error: " + ex.Message);
}
}
$(window).load(function () {
$('#Loan1Submit').removeAttr('disabled').click(function () { generateLoan(1); });
$('#Loan1Clear').removeAttr('disabled').click(function () { clearLoan(1); });
$('#Loan2Submit').removeAttr('disabled').click(function () { generateLoan(2); });
$('#Loan2Clear').removeAttr('disabled').click(function () { clearLoan(2); });
$('#LoanSample').html('<a href="#" onclick="sampleLoan();return false;">Sample loan</a>');
$('#Loan1Copy').html('<a href="#" onclick="copyLoan(2, 1);return false;">Copy from loan 2</a>');
$('#Loan2Copy').html('<a href="#" onclick="copyLoan(1, 2);return false;">Copy from loan 1</a>');
});
}

163
articles/Track.php.txt Normal file
View File

@ -0,0 +1,163 @@
<?php
/**
* Music track object.
*
* @author James Skemp - http://jamesrskemp.com
* @license http://creativecommons.org/licenses/by/3.0/us/
* @version 1.0
*/
class Track {
/**
* How long the track is.
* @var string
*/
var $Time;
/**
* Name or title of the track.
* @var string
*/
var $Name;
/**
* Name of the artist.
* @var string
*/
var $Artist;
/**
* Rating assigned to the track by the playlist's owner.
* @var int
*/
var $Rating;
/**
* Number of times the track has been played.
* @var int
*/
var $PlayCount;
/**
* Date and time the track was last played (and finished).
*/
var $LastPlayed;
/**
* Name of the album the track is from.
* @var string
*/
var $Album;
/**
* True if the album the track is on is a compilation, false otherwise.
* @var bool
*/
var $Compilation;
/**
* Order this track is on the album.
* @var int
*/
var $TrackNumber;
/**
* Total number of tracks on the album.
* @var int
*/
var $TrackCount;
/**
* The album disc the track is on.
* @var int
*/
var $DiscNumber;
/**
* Total number of discs in the album.
* @var int
*/
var $DiscCount;
/**
* Year the track/album was released/published.
* @var int
*/
var $Year;
/**
* Genre of music the track falls into.
* @var string
*/
var $Genre;
/**
* Date and time the track was added.
*/
var $DateAdded;
public function __get($name) {
return $this->$name;
}
public function __set($name, $value) {
$this->$name = $value;
}
/**
* Constructs a Track object from an iTunes Playlists to Xml XML output file.
*
* @param object $xml
*/
function __construct($xml) {
$this->Name = (string)$xml->name;
$this->Album = (string)$xml->album;
$this->Artist = (string)$xml->artist;
$this->Time = (string)$xml['time'];
$this->Rating = (int)$xml->rating;
$this->PlayCount = (int)$xml->playCount;
$this->LastPlayed = (string)$xml->lastPlayed;
$this->Compilation = (bool)$xml->compilation;
$this->TrackNumber = (int)$xml->trackNumber;
$this->TrackCount = (int)$xml->trackCount;
$this->DiscNumber = (int)$xml->discNumber;
$this->DiscCount = (int)$xml->discCount;
$this->Year = (int)$xml->year;
$this->Genre = (string)$xml->genre;
$this->DateAdded = (string)$xml->dateAdded;
}
/**
* Function for sorting Track objects by PlayCount, ascending. Uses LastPlayed for ties.
*
* @access public
* @param Track $x First object to compare.
* @param Track $y Second object to compare.
* @return integer Standard sorting returns.
*/
public function SortPlayCountAsc($x, $y) {
if ($x->PlayCount == $y->PlayCount) {
if ($x->LastPlayed == $y->LastPlayed) {
return 0;
} else if ($x->LastPlayed < $y->LastPlayed) {
return -1;
} else {
return 1;
}
} else if ($x->PlayCount < $y->PlayCount) {
return -1;
} else {
return 1;
}
}
/**
* Function for sorting Track objects by PlayCount, descending. Uses LastPlayed for ties.
*
* @access public
* @param Track $x First object to compare.
* @param Track $y Second object to compare.
* @return integer Standard sorting returns.
*/
public function SortPlayCountDesc($x, $y) {
if ($x->PlayCount == $y->PlayCount) {
if ($x->LastPlayed == $y->LastPlayed) {
return 0;
} else if ($x->LastPlayed > $y->LastPlayed) {
return -1;
} else {
return 1;
}
} else if ($x->PlayCount < $y->PlayCount) {
return 1;
} else {
return -1;
}
}
}
?>

14
clientaccesspolicy.xml Normal file
View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="http://*.jamesrskemp.com"/>
<domain uri="*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>

5
crossdomain.xml Normal file
View File

@ -0,0 +1,5 @@
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-http-request-headers-from domain="*.jamesrskemp.com" headers="*"/>
</cross-domain-policy>

28
css/vehicle_gas.css Normal file
View File

@ -0,0 +1,28 @@
vehicles, vehicle, fillups, fillup {
display:block;
}
vehicle, fillups, fillup {
margin-left:1em;
}
vehicle {
margin-bottom:2em;
}
make, model, year {
font-weight:bold;
}
date, milesCar, milesDriven, gallons, costGallon, costTotal {
display:table-cell;
text-align:right;
}
date, milesCar, milesDriven, gallons, costGallon, costTotal {
width:75px;
}
notes {
display:table-cell;
font-style:italic;
padding-left:1em;
text-align:left;
}
costTotal:before {
content: "$";
}

30
dtd/domain_names.dtd Normal file
View File

@ -0,0 +1,30 @@
<!ELEMENT domains (domain*)>
<!ELEMENT domain (name, created, expires, registrar, servers*, subdomains*)>
<!ATTLIST domain id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT created EMPTY>
<!ATTLIST created year CDATA #REQUIRED>
<!ATTLIST created month CDATA #REQUIRED>
<!ATTLIST created day CDATA #REQUIRED>
<!ELEMENT expires EMPTY>
<!ATTLIST expires year CDATA #REQUIRED>
<!ATTLIST expires month CDATA #REQUIRED>
<!ATTLIST expires day CDATA #REQUIRED>
<!ELEMENT registrar (#PCDATA)>
<!ELEMENT servers (server*)>
<!ELEMENT server (ip, path)>
<!ATTLIST server id CDATA #REQUIRED>
<!ELEMENT ip (#PCDATA)>
<!ELEMENT path (#PCDATA)>
<!ELEMENT subdomains (subdomain*)>
<!ELEMENT subdomain (path)>
<!ATTLIST subdomain id CDATA #REQUIRED>
<!ATTLIST subdomain name CDATA #REQUIRED>
<!ATTLIST subdomain server CDATA #REQUIRED>

24
dtd/vehicle_gas.dtd Normal file
View File

@ -0,0 +1,24 @@
<!ELEMENT vehicles (personNameFirst, personNameLast, vehicle*)>
<!ELEMENT personNameFirst (#PCDATA)>
<!ELEMENT personNameLast (#PCDATA)>
<!ELEMENT vehicle (make, model, year, fillups)>
<!ATTLIST vehicle id CDATA #REQUIRED>
<!ELEMENT make (#PCDATA)>
<!ELEMENT model (#PCDATA)>
<!ELEMENT year (#PCDATA)>
<!ELEMENT fillups (fillup*)>
<!ELEMENT fillup (date, milesCar, milesDriven, gallons, costGallon, costTotal, notes)>
<!ATTLIST fillup id CDATA #REQUIRED>
<!ELEMENT date (#PCDATA)>
<!ELEMENT milesCar (#PCDATA)>
<!ELEMENT milesDriven (#PCDATA)>
<!ELEMENT gallons (#PCDATA)>
<!ELEMENT costGallon (#PCDATA)>
<!ELEMENT costTotal (#PCDATA)>
<!ELEMENT notes (#PCDATA)>

19
dtd/video_games.dtd Normal file
View File

@ -0,0 +1,19 @@
<!ELEMENT games (game*)>
<!ELEMENT game (title, system, purchase, sell, own, notes)>
<!ATTLIST game id CDATA #REQUIRED>
<!ELEMENT title (#PCDATA)>
<!ELEMENT system (console, version)>
<!ELEMENT purchase (date, price, place)>
<!ELEMENT sell (date, price)>
<!ELEMENT own (#PCDATA)>
<!ELEMENT notes (#PCDATA)>
<!ELEMENT console (#PCDATA)>
<!ELEMENT version (#PCDATA)>
<!ELEMENT date (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT place (#PCDATA)>

BIN
favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
gallery/P001.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

BIN
gallery/P001_0810.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
gallery/P002.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
gallery/P002_0810.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

BIN
gallery/P003.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
gallery/P003_0810.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
gallery/P004.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

BIN
gallery/P004_0810.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
gallery/P005.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
gallery/P005_0810.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
gallery/P006.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

BIN
gallery/P006_0810.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
gallery/P007.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
gallery/P007_0810.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
gallery/P008.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

BIN
gallery/P008_0810.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
gallery/P009.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
gallery/P009_0810.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
gallery/P010.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

BIN
gallery/P010_0810.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
gallery/P011.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

BIN
gallery/P011_0810.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
gallery/P012.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

BIN
gallery/P012_0810.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
gallery/P013.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
gallery/P013_0810.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
gallery/P014.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
gallery/P014_0810.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
gallery/P015.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
gallery/P015_0810.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
gallery/P016.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

BIN
gallery/P016_0810.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
gallery/P017.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

BIN
gallery/P017_0810.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
gallery/P018.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
gallery/P018_0810.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
gallery/P019.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
gallery/P019_0810.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
gallery/P020.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

BIN
gallery/P020_0810.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Some files were not shown because too many files have changed in this diff Show More