Initial add of remaining items.
Initial commit of remaining items in JamesRSkemp subversion project. Revision 1289.
|
@ -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>
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
<%@ Application Codebehind="Global.asax.cs" Inherits="JamesRSkemp.Media.Web.Global" Language="C#" %>
|
|
@ -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)));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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>
|
|
@ -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
|
||||
|
||||
}
|
||||
}
|
|
@ -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")]
|
|
@ -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; }
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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 - - - -
|
|
@ -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() {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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"> </div>
|
||||
<div id="Loan2Data"> </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>
|
|
@ -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>');
|
||||
|
||||
});
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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: "$";
|
||||
}
|
|
@ -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>
|
|
@ -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)>
|
|
@ -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)>
|
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 7.8 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 7.1 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 6.5 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 5.8 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 76 KiB |
After Width: | Height: | Size: 6.9 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 6.4 KiB |
After Width: | Height: | Size: 47 KiB |
After Width: | Height: | Size: 7.2 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 96 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 6.5 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 6.4 KiB |
After Width: | Height: | Size: 39 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 8.1 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 9.0 KiB |
After Width: | Height: | Size: 8.9 KiB |
After Width: | Height: | Size: 8.4 KiB |
After Width: | Height: | Size: 8.5 KiB |
After Width: | Height: | Size: 8.1 KiB |
After Width: | Height: | Size: 9.6 KiB |
After Width: | Height: | Size: 9.3 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 9.3 KiB |
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 9.0 KiB |
After Width: | Height: | Size: 9.3 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 9.2 KiB |
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 9.2 KiB |
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 9.0 KiB |
After Width: | Height: | Size: 8.5 KiB |
After Width: | Height: | Size: 8.6 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 9.2 KiB |
After Width: | Height: | Size: 9.2 KiB |