Samir Khan

1981 Reputation

20 Badges

16 years, 229 days

My role is to help customers better exploit our tools. I’ve worked in selling, supporting and marketing maths and simulation software for all my professional career.

I’m fascinated by the full breadth and range of application of Maple. From financial mathematics and engineering to probability and calculus, I’m always impressed by what our users do with our tools.

However much I strenuously deny it, I’m a geek at heart. My first encounter with Maple was as an undergraduate when I used it to symbolically solve the differential equations that described the heat transfer in a series of stirred tanks. My colleagues brute-forced the problem with a numerical solution in Fortran (but they got the marks because that was the point of the course). I’ve since dramatized the process in a worksheet, and never fail to bore people with the story behind it.

I was born, raised and spent my formative years in England’s second city, Birmingham. I graduated with a degree in Chemical Engineering from The University of Nottingham, and after completing a PhD in Fluid Dynamics at Herriot-Watt University in Edinburgh, I started working for Adept Scientific – Maplesoft’s partner in the UK.

MaplePrimes Activity


These are replies submitted by Samir Khan

Hello Lester,

You can upload a PDF or zip file to Mapleprimes.com and link to it in a post via the green up arrow in the comments editor.

Samir

What elements are you having problems with? Can you post a simple example?

Samir

Funnily enough I needed to do exactly this a month ago for an app I was writing. This code downloads weather data (from wunderground.com) for Waterloo International Airport, airport code YKF (the airport referenced in your link) for 13th May 2010.

restart;
with(Sockets); sid :=
Open("www.wunderground.com", 80);
Write(sid, cat("GET /history/airport/CYKF/2010/05/13/DailyHistory.html?HideSpecis=0&format=0 HTTP/1.0 \n\n")):
str := "":
while b <> false do
   str := cat(str, b):
   b := Read(sid):
end do:
Close(sid):
str;

If you really wanted to use the Environment Canada website you pointed to, then examine the [CSV] download link near the bottom of the webpage - it links to http://www.climate.weatheroffice.gc.ca/climateData/bulkdata_e.html?timeframe=2&Prov=XX&StationID=32008&Year=2010&Month=4&Day=1&format=csv&type=dly

All you'd need to do is reconcile that link against the code above. Try it out, but if you have problems let me know.

Samir


 

Funnily enough I needed to do exactly this a month ago for an app I was writing. This code downloads weather data (from wunderground.com) for Waterloo International Airport, airport code YKF (the airport referenced in your link) for 13th May 2010.

restart;
with(Sockets); sid :=
Open("www.wunderground.com", 80);
Write(sid, cat("GET /history/airport/CYKF/2010/05/13/DailyHistory.html?HideSpecis=0&format=0 HTTP/1.0 \n\n")):
str := "":
while b <> false do
   str := cat(str, b):
   b := Read(sid):
end do:
Close(sid):
str;

If you really wanted to use the Environment Canada website you pointed to, then examine the [CSV] download link near the bottom of the webpage - it links to http://www.climate.weatheroffice.gc.ca/climateData/bulkdata_e.html?timeframe=2&Prov=XX&StationID=32008&Year=2010&Month=4&Day=1&format=csv&type=dly

All you'd need to do is reconcile that link against the code above. Try it out, but if you have problems let me know.

Samir


 

Chris,

We're working towads parallelizing our math library.  Due to its size and complexity, however, we can't make any promises about when any particular features will be available.

In the meantime, one of our senior kernel developers, Darin Ohashi, has blogged about the topic in detail over at http://www.mapleprimes.com/blog/dohashi

Samir

I've edited my post - you should be able to figure it out

I've edited my post - you should be able to figure it out

This grabs all the SP500 data.

str := "":
for page from 0 to 450 by 50 do
sid := Sockets:-Open("download.finance.yahoo.com", 80):
   Sockets:-Write(sid, cat("GET /d/quotes.csv?s=@%5EGSPC&f=sl1d1t1c1ohgv&e=.csv&h=",page," HTTP/1.0 \n\n")):
   b := Sockets:-Read(sid):
   while b <> false do
      str := cat(str, b):
      b := Sockets:-Read(sid):
   end do:
Sockets:-Close(sid):
end do:
str;

By changing the tags in the portion of the GET request that begins "f=sl1d1t1c1ohgv", you can specify what data you want to download (which is how my original Stock Importer worksheet operates).  The the table of keywords is at the end of this post.

"sl1d1t1c1ohgv" translates to Symbol, Last Trade (Price Only), Last Trade Date, Last Trade Time, Change, Open, Day's High, Days Low, Volume

I'm currently writing all of this up for a blog post at http://www.maplesoft.com/blog/default.aspx

Yahoo Finance Tags

a  Ask
a2  Average Daily Volume
a5  Ask Size
b  Bid
b2  Ask (Real-time)
b3  Bid (Real-time)
b4  Book Value
b6  Bid Size
c  Change & Percent Change
c1  Change
c3  Commission
c6  Change (Real-time)
c8  After Hours Change (Real-time)
d  Dividend/Share
d1  Last Trade Date
d2  Trade Date
e  Earnings/Share
e1  Error Indication (returned for symbol changed / invalid)
e7  EPS Estimate Current Year
e8  EPS Estimate Next Year
e9  EPS Estimate Next Quarter
f6  Float Shares
g  Day's Low
h  Day's High
j  52-week Low
k  52-week High
g1  Holdings Gain Percent
g3  Annualized Gain
g4  Holdings Gain
g5  Holdings Gain Percent (Real-time)
g6  Holdings Gain (Real-time)
i  More Info
i5  Order Book (Real-time)
j1  Market Capitalization
j3  Market Cap (Real-time)
j4  EBITDA
j5  Change From 52-week Low
j6  Percent Change From 52-week Low
k1  Last Trade (Real-time) With Time
k2  Change Percent (Real-time)
k3  Last Trade Size
k4  Change From 52-week High
k5  Percebt Change From 52-week High
l  Last Trade (With Time)
l1  Last Trade (Price Only)
l2  High Limit
l3  Low Limit
m  Day's Range
m2  Day's Range (Real-time)
m3  50-day Moving Average
m4  200-day Moving Average
m5  Change From 200-day Moving Average
m6  Percent Change From 200-day Moving Average
m7  Change From 50-day Moving Average
m8  Percent Change From 50-day Moving Average
n  Name
n4  Notes
o  Open
p  Previous Close
p1  Price Paid
p2  Change in Percent
p5  Price/Sales
p6  Price/Book
q  Ex-Dividend Date
r  P/E Ratio
r1  Dividend Pay Date
r2  P/E Ratio (Real-time)
r5  PEG Ratio
r6  Price/EPS Estimate Current Year
r7  Price/EPS Estimate Next Year
s  Symbol
s1  Shares Owned
s7  Short Ratio
t1  Last Trade Time
t6  Trade Links
t7  Ticker Trend
t8  1 yr Target Price
v  Volume
v1  Holdings Value
v7  Holdings Value (Real-time)
w  52-week Range
w1  Day's Value Change
w4  Day's Value Change (Real-time)
x  Stock Exchange
y  Dividend Yield

Samir

This grabs all the SP500 data.

str := "":
for page from 0 to 450 by 50 do
sid := Sockets:-Open("download.finance.yahoo.com", 80):
   Sockets:-Write(sid, cat("GET /d/quotes.csv?s=@%5EGSPC&f=sl1d1t1c1ohgv&e=.csv&h=",page," HTTP/1.0 \n\n")):
   b := Sockets:-Read(sid):
   while b <> false do
      str := cat(str, b):
      b := Sockets:-Read(sid):
   end do:
Sockets:-Close(sid):
end do:
str;

By changing the tags in the portion of the GET request that begins "f=sl1d1t1c1ohgv", you can specify what data you want to download (which is how my original Stock Importer worksheet operates).  The the table of keywords is at the end of this post.

"sl1d1t1c1ohgv" translates to Symbol, Last Trade (Price Only), Last Trade Date, Last Trade Time, Change, Open, Day's High, Days Low, Volume

I'm currently writing all of this up for a blog post at http://www.maplesoft.com/blog/default.aspx

Yahoo Finance Tags

a  Ask
a2  Average Daily Volume
a5  Ask Size
b  Bid
b2  Ask (Real-time)
b3  Bid (Real-time)
b4  Book Value
b6  Bid Size
c  Change & Percent Change
c1  Change
c3  Commission
c6  Change (Real-time)
c8  After Hours Change (Real-time)
d  Dividend/Share
d1  Last Trade Date
d2  Trade Date
e  Earnings/Share
e1  Error Indication (returned for symbol changed / invalid)
e7  EPS Estimate Current Year
e8  EPS Estimate Next Year
e9  EPS Estimate Next Quarter
f6  Float Shares
g  Day's Low
h  Day's High
j  52-week Low
k  52-week High
g1  Holdings Gain Percent
g3  Annualized Gain
g4  Holdings Gain
g5  Holdings Gain Percent (Real-time)
g6  Holdings Gain (Real-time)
i  More Info
i5  Order Book (Real-time)
j1  Market Capitalization
j3  Market Cap (Real-time)
j4  EBITDA
j5  Change From 52-week Low
j6  Percent Change From 52-week Low
k1  Last Trade (Real-time) With Time
k2  Change Percent (Real-time)
k3  Last Trade Size
k4  Change From 52-week High
k5  Percebt Change From 52-week High
l  Last Trade (With Time)
l1  Last Trade (Price Only)
l2  High Limit
l3  Low Limit
m  Day's Range
m2  Day's Range (Real-time)
m3  50-day Moving Average
m4  200-day Moving Average
m5  Change From 200-day Moving Average
m6  Percent Change From 200-day Moving Average
m7  Change From 50-day Moving Average
m8  Percent Change From 50-day Moving Average
n  Name
n4  Notes
o  Open
p  Previous Close
p1  Price Paid
p2  Change in Percent
p5  Price/Sales
p6  Price/Book
q  Ex-Dividend Date
r  P/E Ratio
r1  Dividend Pay Date
r2  P/E Ratio (Real-time)
r5  PEG Ratio
r6  Price/EPS Estimate Current Year
r7  Price/EPS Estimate Next Year
s  Symbol
s1  Shares Owned
s7  Short Ratio
t1  Last Trade Time
t6  Trade Links
t7  Ticker Trend
t8  1 yr Target Price
v  Volume
v1  Holdings Value
v7  Holdings Value (Real-time)
w  52-week Range
w1  Day's Value Change
w4  Day's Value Change (Real-time)
x  Stock Exchange
y  Dividend Yield

Samir

MapleSim can already model 3D multibody systems.  We already have examples of Stewart Platforms and multi-DOF robots, for example.  Additionally, I'm working on a full 3D model of the Taipei 101 damper.

First 6 7 8 9 Page 8 of 9