New @appxen logo I designed today. Appxen is a PSD to native UI compiler. Coming to a @kickstarter near you soon... #photoshopnotrequired
Stranger Things
Game of Thrones Daily

roma★
Show & Tell

oozey mess
2025 on Tumblr: Trends That Defined the Year
ojovivo

Andulka
tumblr dot com


Discoholic 🪩
Claire Keane
we're not kids anymore.
AnasAbdin

JVL
art blog(derogatory)
Misplaced Lens Cap
Monterey Bay Aquarium

pixel skylines
seen from South Korea
seen from United Kingdom

seen from Netherlands

seen from United States

seen from United States

seen from Kazakhstan
seen from Romania

seen from United States
seen from United States
seen from Chile

seen from United States

seen from Germany

seen from Germany
seen from United States

seen from Türkiye
seen from United States

seen from United States

seen from United Kingdom

seen from United States

seen from United States
@euforic-blog
New @appxen logo I designed today. Appxen is a PSD to native UI compiler. Coming to a @kickstarter near you soon... #photoshopnotrequired

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
# [tipm](https://github.com/tipm/tipm) [Titanium package manager.](https://github.com/tipm/tipm) ## Installation $ npm install -g tipm ## Installing packages To install one or more packages, simply pass their github repo names as arguments to `tipm install`. Dependencies are resolved and the tipm module contents are downloaded into your apps `module/commonjs/` directory by default. View `tipm help install` for details. $ tipm install tipm/superagent install : tipm/superagent@master dep : tipm/[email protected] install : tipm/[email protected] fetch : tipm/monglo:tipm-monglo.js fetch : tipm/monglo:fs-store.js fetch : tipm/events:tipm-events.js complete : tipm/superagent complete : tipm/events ## Searching for module By adding your tipm module to the [TIPM List](https://github.com/tipm/tipm/wiki/Modules) wiki page it will become automatically available to `tipm-search(1)`. When invoked with no query all tipm modules are displayed, otherwise a filtered search, ordered by the number of github "stars": $ tipm search emitter tipm/monglo url: https://github.com/tipm/monglo desc: Portable Pure JS MongoDB ★ 12 tipm/events url: https://github.com/tipm/events desc: JS Event Emitters ★ 10 ## Usage Via `--help`: Usage: tipm [options] Options: -h, --help output usage information -V, --version output the version number Commands: install install one or more tipm modules create create a module skeleton search [query] search with the given query info [prop] output json module information changes output changelog contents docs output readme contents open open module github repo ls list installed tipm modules ## Features - write modular commonjs modules - write modules that include their own styles, images, scripts, or any combo - no registry publishing or account required, uses github repositories - extensible sub-commands via `tipm-YOURCOMMAND` git-style - module skeleton creation command - installs dependencies from the command-line or ./package.json - avoid name squatting through github's naming conventions - build your module with `--standalone` to share them with non-tipm(1) users - view documentation from the command line - simple private registry set up (all you need is a file server) - very fast ## Using Github as a registry By using GitHub as the registry, `tipm(1)` is automatically available to you without further explicit knowledge or work creating a registry account etc. A nice side-effect of this namespaced world is that dependencies are explicit and self-documenting. No longer do you need to query the registry for a "repo" property that may not exist, it's simply built in to the package name, for example ["visionmedia/page.js"](https://github.com/visionmedia/page.js) rather than the unclear "page". Another benefit of this is that there are zero name collisions, for example you may use "tipm/tip" for a dependency of "foo", and "someuser/tip" as a dependency of "bar", providing namespaced module names. This prevents obscure or irrelevant naming such as "progress", "progress2", "progress-bar", "progress-module" found in npm. ## Creating a tipm Module The `tipm-create(1)` command can create a module project skeleton for you by filling out the prompts. Once this repo is published to Github, you're all done! Note when publishing only publish the files inside the modules version folder. ex. ./tipm-superagent/0.9.6/ $ tipm create jsonstream repo (username/project): tipm/jsonstream description: Streaming JSON parser version (0.0.1): author name: Christian Sullivan license type (MIT): minimum Ti SDK version (2.0.0): Ti guid (xxxxxxx-xxxxxx-xxxxxx): create : jsonstream/0.0.1 create : jsonstream/0.0.1/jsonstream.js create : jsonstream/0.0.1/Readme.md create : jsonstream/0.0.1/.gitignore create : jsonstream/0.0.1/package.json ## Manifest The Titanium commonjs manifest file is automatically generated by `tipm(1)` when installing the module. So there is no need to publish this to your git repo or manually create. If you wish to create your own just include `manifest` in the files array of your `package.json` and it will override the generated manifest ## Developing tipm(1) sub-commands `tipm(1)` and sub-commands are structured much like `git(1)`, in that sub-commands are simply separate executables. For example `$ tipm info pkg` and `$ tipm-info pkg` are equivalent. Because of this you'll likely want `PATH="./bin:$PATH"` in your profile or session while developing tipm, otherwise `./bin/tipm` will have a hard time finding the sub-commands. ## Running tests Make sure dependencies are installed: $ npm install Then run: $ make test # TODO - Compile native modules - All for removing modules - Integrate view templates (ax-view) - Integrate stylesheet templates (ax-style) ## Shout-outs The concept of tipm themselves are nothing new, Drupal for example has been doing this for years, however it seemed the concept was never really translated to the client. My hope is that other communities will re-implement this simple tool in their language of choice so that we can all consume components easily. ## Credits tipm is based on port of [TJ Holowaychuk](https://github.com/visionmedia) [Component](https://github.com/component/component) for titanium apps ## Components Contributors - TJ Holowaychuk - Guillermo Rauch - Garrett Johnson - Amir Abu Shareb - Adam Sanderson - Matt Mueller - Forbes Lindesay - Arpad Borsos - Dan Williams ## License (The MIT License) Copyright (c) 2012 Christian Sullivan <[email protected]> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# Smail SMS texting API that uses carrier-specific gateways to deliver SMS messages via Sendmail. Zero dependencies or 3rd party APIs required. ## Requirements - Node.js - Sendmail ## Installing $ npm install smail ## Usage // Require the module var smail = require('smail'); // Message parameters var options = { to: '5554446666', from:'5551112222', text:'Test SMS from Smail' // If you already know the carrier set the optional parameter // For a list of carrier names see `lib/providers` //carrier:'CARRIER_NAME' }; // Create new smail instance var sms = smail(/*Optional option defaults object*/); // Send the SMS // Options passed to send will override th default options for the message sms.send(options,function(err){ // Do something... }); ## Custom Providers List TODO ## Supported Carriers Carrier list is located in `lib/providers` - U.S. Providers - Alltel, Ameritech, AT&T Wireless, Boost, CellularOne, Cingular, Edge Wireless, Sprint PCS, Telus Mobility, T-Mobile, Metro PCS, Nextel, O2, Orange, Qwest, Rogers Wireless, US Cellular, Verizon, Virgin Mobile. ## License The MIT License
Apic.js - Build Epic API Clients Automatically
# [Apic.js](http://euforic.co/Apic.js) Are you tired of writing trivial restful api clients I know I am! apic is a cross-platform automatic api client builder! ## Supported Platforms - Titanium Mobile - Browser - Node.js ## Schema The api schema is composed of __namespaces__, __actions__, __verb__, __url__(optional), __path__(optional). Overide default action request path by setting the path option. Overide base url by setting the url option. var sampleSchema = { // Creates _user_ namespace user:[ // Request will result in a get request to `BASE_URL/user/show` { action:'show' , verb:'GET' } // Request will result in a put request to `BASE_URL/account/add/new` , { action:'create' , verb:'PUT', path:'/account/add/new' } // Request will result in delete request to `http://api.adhocurl.com/remove` , { action:'remove' , verb:'DELETE' url:'http://api.adhocurl.com' } // Request will result in a post request to `http://api.adhocurl.com/member/auth` , { action:'login' , verb:'POST', url:'http://api.adhocurl.com', path:'/member/auth' } ] , job:[ { action:'create' , verb:'PUT' } , { action:'update' , verb:'POST' } , { action:'remove' , verb:'DELETE' } , { action:'show' , verb:'GET' } ] }; ## Create w/ Schema Geneate an API w/ the Provided Schema // Create Apic w/ Schema var scApic = apic(sampleSchema); // Set API's Base Url. // If Omitted will default to `'/'` scApic.baseUrl = 'http://api.mysite.com'; ## Add Namespace actions Add namespace to Apic api // Create new Apic var nsApic = apic(); // Set Base Url nsApic.baseUrl = 'http://api.myothersite.com'; // Add namespace actions nsApic.add('product', [ { action:'create' , verb:'PUT' } , { action:'update' , verb:'POST' } , { action:'remove' , verb:'DELETE' } ]); // Add another action to namespace nsApic.add('product', [{ action:'show' , verb:'GET' }]); // Add more to our schema generated api example scApic.add('user', [{ action:'message' , verb:'POST' }]); ## Using you Generated API // Generated APIs var scApi = myApic.api; var nsApi = nsApic.api; // Apic Generated APIs scApi.user.create('ted' , function(response){ // Do something with response; }); scApi.job.update({status :'complete'} , function(response){ // Do something with response; }); scApi.user.message({ id : 007, message:'Api Clients\'s are easy with Apic'} , function(response){ // Do something with response; }); nsApi.product.create('book' , function(response){ // Do something with response; }); nsApi.product.show({status :'available'} , function(response){ // Do something with response; });
Rest API Client Generator
## Simple cross platform Rest API Client Generator Developed to help cut down the time it takes to build simple trivial rest api clients ### Credit - Built with modified version of [Superagent](https://github.com/visionmedia/superagent) to support Titanium - Original concept from [Bedframe](https://github.com/dawsontoth/BedFrame)

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
JS.LA Talk on Titanium MongloDB Shimmy.js PSD2TI
Design to Deploy - Mobile Development with Titanium from JSLA on Vimeo.
On device MongoDB for Titanium Mobile MongoDB style queries Persistence for Collections
MongloDB
Chatty Titanium Logger
Simple remote logging with Balloons.io and Socket.io
app.js
logger.js
Titanium Count.ly SDK Module
Countly is an innovative, real-time, open source mobile analytics application. It collects data from mobile phones, and visualizes this information to analyze mobile application usage and end-user behavior. There are two parts of Countly: the server that collects and analyzes data, and mobile SDK that sends this data (for iOS & Android).
git Repo
Titanium Socket.io-Client
Socket.io-client v9 for titanium mobile
web sockets implemented using Ti-websocket-client
You can find the full gist here Ti.Socket.io.js

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
Github Repo Doc Viewer for Mobile
Mobile Github Repo Doc Viewer
built with Titanium Mobile and DocumentUp
So I was getting tired of trying to navigate github via my iphone. So I wrote this quick super simple Titanium app to display github repo's readme.md formatted nicely using DocumentUp.
var url = "http://documentup.com/"; var win = Ti.UI.createWindow({backgroundColor:'#000000'}); var input = Ti.UI.createTextField({color:'#ffffff',left:5,top:5,right:70,height:40,hintText:'username/repo'}); var doc = Ti.UI.createWebView({top:55,bottom:0,left:0,right:0,disableBounce:true}); var load = Ti.UI.createButton({top:5, right:5, width:55, height:35, title:'Load'}); var client = Ti.Network.createHTTPClient(); client.onload = function(e) { doc.html= this.responseText; }; client.timeout = 5000; win.add([doc,input,load]); load.addEventListener('click', function(e) { var _url = (input.value) ? url+input.value : url; client.open('GET', _url); client.send(); }); win.open();
# Fuse.js (0.1.0) Globally Available Objects, Namespaces and Node.js Style EventEmitters for Titanium Mobile. Currently only for iOS. Android Support on the way. ## Usage You MUST require fuse in your app.js so it can be added to the global scope
//Add fuse to global scope require('Fuse').w(this)
## Fuse "w"ith Fuse Objects with Global Scope or fuse namespace Set third param to true if you want to fuse with the Global Scope If false or undefined object will fuse with "fuse" namespace
//Create Object basic object var ui = { view : Ti.UI.createView, label : Ti.UI.createLabel, table : Ti.UI.createTableView, tableRow : Ti.UI.createTableViewRow, window : Ti.UI.createWindow, animation : Ti.UI.createAnimation }; /** * Set third param to true if you want to fuse with the Global Scope * If false or undefined object will fuse with "fuse" Object */ fuse.w('ui', ui, true) .w('console', Ti.API, true) .w('info', Ti.API.info, true) .w('log', Ti.API.log, true) // log('test') .w('log', Ti.API.info) // fuse.log('test') .w('debug', Ti.API.debug, true)
## Creating a "fused" Object and Nesting "fused" Objects All "fused" Objects come equipted with EventEmitters and the ability to nest new children objects; Use the "parent()" function to back out of a "fused" Object
//Create Custom fused Object fuse.create('base', true) .w('test', function(){alert('test Base');} ) //Add function .create('child') //Create Nested Object .w('test', function(){alert('test Child');} ) //Add function to Nested Object .parent() //Back out of Object to Parent .create('sibling') //Create Sibling Object .w('test', function(){alert('test Sibling');} ) //add function to Sibling Object //Function Calls fuse.log('Test'); base.test(); base.child.test(); base.sibling.test();
## EventEmitters Node.js Style EventEmitters
//Adds a listener. fuse.on('event', function(){}); //Emits an event fuse.emit('event', {}); //Adds a volatile listener fuse.once('event', function(){}); //Removes a listener fuse.removeListener('event', function(){}); //Removes all listeners for an event fuse.removeAllListeners('event'); //Gets all listeners for a certain event fuse.listeners('event');
## License (The MIT License) Copyright (c) 2011-2012 Christian Sullivan <[email protected]> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Banking.js - The Missing API for Banks
Banking.js (Github)
The Missing API for your bank.
Retrieve all of your bank transactions similiar to how quickbooks does it.
No need to depend on or pay for third party services
Bank statement results in JSON or Valid XML
Supports all financial institutions (File an issue if yours does not work)
What is OFX?
The Short Version
The banks crappy malformed version of XML that many finacial apps such as quickbooks and quicken use to import your bank transactions from your bank acount, credit card, money market, etc..
The Long Version
Open Financial Exchange
The file extension .ofx is associated with an Open Financial Exchange file as a standard format for the exchange of financial data between institutions.
This file is universally accepted by financial software, including Intuit Quicken, Microsoft Money and GnuCash.
Background
The Open Financial Exchange file format was created in 1997 via a joint venture by CheckFree, Intuit and Microsoft.
The purpose was to allow for a universally accepted financial format used to broker transactions on the Internet.
The .ofx file format is seen when dealing with financial transactions involving consumers, businesses, stocks and mutual funds.
OFX on Wikipedia
Installation
$ npm install banking
Usage
Find your banks connection details Here
Get Statement from Bank
var banking = require('banking'); var bankInfo = { fid: 10898 , fidorg: 'B1' , url: 'https://yourBanksOfxApiURL.com' , bankid: 0123456 /* If bank account use your bank routing number otherwise set to null */ , user: 'username' , pass: 'password' , accid: 0123456789 /* Account Number */ , acctype: 'CHECKING' /* CHECKING || SAVINGS || MONEYMRKT || CREDITCARD */ , date_start: 20010125 /* Statement start date YYYYMMDDHHMMSS */ , date_end: 20110125 /* Statement end date YYYYMMDDHHMMSS */ }; //If second param is omitted JSON will be returned by default banking.getStatement(bankInfo, 'xml', function(res, err){ if(err) console.log(err) console.log(res); });
Parse file (Ofx|Qfx)
Download file for quickbooks import from your bank and parse
banking.parseOfxFile('/myfile.ofx', function (res, err) { if(err) done(err) console.log(res); });
Parse Ofx String
banking.parseOfxString('SomeSuperLongOfxString', function (res, err) { if(err) done(err) console.log(res); });
Sample Response
{ "OFX": { "SIGNONMSGSRSV1": { "SONRS": { "STATUS": { "CODE": "0", "SEVERITY": "INFO", "MESSAGE": "SUCCESS" }, "DTSERVER": "20120126212302.454[-8:PST]", "LANGUAGE": "ENG", "FI": { "ORG": "DI", "FID": "321081669" } } }, "BANKMSGSRSV1": { "STMTTRNRS": { "TRNUID": "BiJNgqjvbw5vg18Z5T8kZASgUKmsFnNY", "STATUS": { "CODE": "0", "SEVERITY": "INFO", "MESSAGE": "SUCCESS" }, "CLTCOOKIE": "iXus7", "STMTRS": { "CURDEF": "USD", "BANKACCTFROM": { "BANKID": "321081669", "ACCTID": "3576960405", "ACCTTYPE": "CHECKING" }, "BANKTRANLIST": { "DTSTART": "20010125120000.000", "DTEND": "20120126212302.638[-8:PST]", "STMTTRN": [{ "TRNTYPE": "DEP", "DTPOSTED": "20110407070000.000", "DTAVAIL": "20110407070000.000", "TRNAMT": "1934.65", "FITID": "156599402", "NAME": "CLIENT DEPOSIT", "MEMO": "CLIENT DEPOSIT" }, { "TRNTYPE": "DEBIT", "DTPOSTED": "20110412070000.000", "DTAVAIL": "20110412070000.000", "TRNAMT": "-700.00", "FITID": "156950780", "NAME": "DOMESTIC WIRE FUNDS-DEBIT CHRIST", "MEMO": "DOMESTIC WIRE FUNDS-DEBIT CHRISTIAN SULLIVAN" }, { "TRNTYPE": "CHECK", "DTPOSTED": "20110414070000.000", "DTAVAIL": "20110414070000.000", "TRNAMT": "-38.20", "FITID": "157222076", "CHECKNUM": "10004", "NAME": "CHECK WITHDRAWAL", "MEMO": "CHECK WITHDRAWAL" }, { "TRNTYPE": "CHECK", "DTPOSTED": "20110414070000.000", "DTAVAIL": "20110414070000.000", "TRNAMT": "-349.79", "FITID": "157222077", "CHECKNUM": "10006", "NAME": "CHECK WITHDRAWAL", "MEMO": "CHECK WITHDRAWAL" }] }, "LEDGERBAL": { "BALAMT": "1661.41", "DTASOF": "20120126212302.751[-8:PST]" }, "AVAILBAL": { "BALAMT": "2761.41", "DTASOF": "20120126212302.751[-8:PST]" } } } } } }
TODO
Retrieve users available accounts with out account numbers
Add directory of common banks
More Information
Banking Connection Parameters
Offical OFX Home Page
License
(The MIT License)
Copyright (c) 2010-2012 Christian Sullivan <[email protected]>
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
TiAgent - Chainable XHR port of SuperAgent for Titanium and Web
TiAgent (Github)
Ti Agent is light-weight progressive ajax API crafted for flexibility, readability, and a low learning curve after being frustrated with many of the existing request APIs. This module works for web and Titanium Appcelerator applications
request .post('/api/pet') .data({ name: 'Manny', species: 'cat' }) .set('X-API-Key', 'foobar') .set('Accept', 'application/json') .end(function(res){ if (res.ok) { alert('yay got ' + JSON.stringify(res.body)); } else { alert('Oh no! error ' + res.text); } });
Request basics
A request can be initiated by invoking the appropriate method on the request object, then calling .end() to send the request. For example a simple GET request:
request .get('/search') .end(function(res){ });
The node client may also provide absolute urls:
request .get('http://example.com/search') .end(function(res){ });
DELETE, HEAD, POST, PUT and other HTTP verbs may also be used, simply change the method name:
request .head('/favicon.ico') .end(function(res){ });
DELETE is a special-case, as it's a reserved word, so the method is named .del():
request .del('/user/1') .end(function(res){ });
Crafting requests
TiAgent's flexible API gives you the granularity you need, when you need, yet more concise variations help reduce the amount of code necessary. For example the following GET request:
request .get('/search') .end(function(res){ });
Could also be defined as the following, where a callback is given to the HTTP verb method:
request .get('/search', function(res){ });
Taking this further the default HTTP verb is GET so the following works as well:
request('/search', function(res){ });
This applies to more complicated requests as well, for example the following GET request with a query-string can be written in the chaining manner:
request .get('/search') .data({ query: 'tobi the ferret' }) .end(function(res){ });
Or one may pass the query-string object to .get():
request .get('/search', { query: 'tobi the ferret' }) .end(function(res){ });
Taking this even further the callback may be passed as well:
request .get('/search', { query: 'tobi the ferret' }, function(res){ });
Setting header fields
Setting header fields is simple, invoke .set() with a field name and value:
request .get('/search') .set('API-Key', 'foobar') .set('Accept', 'application/json') .end(callback);
GET requests
The .data() method accepts objects, which when used with the GET method will form a query-string. The following will produce the path /search?query=Manny&range=1..5&order=desc.
request .get('/search') .data({ query: 'Manny' }) .data({ range: '1..5' }) .data({ order: 'desc' }) .end(function(res){ });
The .data() method accepts strings as well:
request .get('/querystring') .data('search=Manny&range=1..5') .end(function(res){ });
POST / PUT requests
A typical JSON POST request might look a little like the following, where we set the Content-Type header field appropriately, and "write" some data, in this case just a JSON string.
request.post('/user') .set('Content-Type', 'application/json') .data('{"name":"tj","pet":"tobi"}) .end(callback)
Since JSON is undoubtably the most common, it's the default! The following example is equivalent to the previous.
request.post('/user') .data({ name: 'tj', pet: 'tobi' }) .end(callback)
Or using multiple .data() calls:
request.post('/user') .data({ name: 'tj' }) .data({ pet: 'tobi' }) .end(callback)
TiAgent formats are extensible, however by default "json" and "form" are supported. To send the data as application/x-www-form-urlencoded simply invoke .type() with "form-data", where the default is "json". This request will POST the body "name=tj&pet=tobi".
request.post('/user') .type('form') .data({ name: 'tj' }) .data({ pet: 'tobi' }) .end(callback)
Response properties
Many helpful flags and properties are set on the Response object, ranging from the response text, parsed response body, header fields, status flags and more.
Response text
The res.text property contains the unparsed response body string.
Response body
Much like TiAgent can auto-serialize request data, it can also automatically parse it. When a parser is defined for the Content-Type, it is parsed, which by default includes "application/json" and "application/x-www-form-urlencoded". The parsed object is then available via res.body.
Response header fields
The res.header contains an object of parsed header fields, lowercasing field names much like node does. For example res.header['content-length'].
Response Content-Type
The Content-Type response header is special-cased, providing res.contentType, which is void of the charset (if any). For example the Content-Type of "text/html; charset=utf8" will provide "text/html" as res.contentType, and the res.charset property would then contain "utf8".
Response status
The response status flags help determine if the request was a success, among other useful information, making TiAgent ideal for interacting with RESTful web services. These flags are currently defined as:
var type = status / 100 | 0; // status / class res.status = status; res.statusType = type; // basics res.info = 1 == type; res.ok = 2 == type; res.clientError = 4 == type; res.serverError = 5 == type; res.error = 4 == type || 5 == type; // sugar res.accepted = 202 == status; res.noContent = 204 == status || 1223 == status; res.badRequest = 400 == status; res.unauthorized = 401 == status; res.notAcceptable = 406 == status; res.notFound = 404 == status;
Lots of new stuff coming
Hello followers sorry for the lack of posts things have been crazy, but I do have lots of great new projects and I will be attending node summit at the end of the month so many great posts to come in the following weeks :-)

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
Photoshop To iOS Helper Script
Tired of changing file names adding @2x Export With Suffix #photoshop script great for @appcelerator #titanium projects Gist was pretty long so here is a link to it instead of embedding it in the blog post. => Photoshop Script HERE
tumblr Custom Page as Home Page Hack!
Nothing Fancy, but it works.