text:
New Jersey takes over The Grand Victory tonight! Three bands from the Tiny Giant Artist Collective are playing for free. Who can beat free?
- Lost Romance's one online offering (a live recording called "Top Of The World") paints them as reverb-drenched makers of rock-ballad-anthems, somewhere between U2, Bruce Springsteen and The Replacements. Listen here.
- Missal and the Mindreaders make melancholy jazzy waltzes with a stellar female voice soaring above arpeggiated 6/8 guitars jangling like they're straight out of a Badalamenti sound track. These are the songs they play in a movie or miniseries when the female lead finally gets a sassy confidence and strikes out on her own after a heartbreak. Listen here.
- Invisible Lines resurrect the finest of turn-of-the-millennium emo, calling to mind bands like Jimmy Eat World, The Promise Ring, The Get Up Kids, and all other makers of anthemic heartbreak songs. Let's loosen up our elbows for those periodic fist-pounds into the air while we tuck our thumbs behind the straps of our backpacks. What did we ever keep in those backpacks at shows in the 90s anyway? Listen here.


text:
The Feed
By Stephanie March
Foodie File
By Dara Moskowitz Grumdahl
The Host
Harvest Beer Festival
Mpls.St.Paul Event
Restaurant Week
Party Patrol
By Parties Editors
The Morning After
By Tad Simons
Arts Off The Cuff
by Arts & Nightlife Editors
Ali Shops
By Allison Kaplan
ASID MN Showcase Home
Exceptional Properties
By Edina Realty
Super Real Estate Agents
Super Mortgage Professionals
Outstanding Nurses
Fit Fest
The FAM
The FAM Editors
Featured Promotion
Prep Schools
Aisle File
By Emily Howald Sefton
Real Brides
By Real Brides-to-Be
Diamond Awards
With the changing of laws and uptick in local beer fascination, brewers are opening their doors to the public and selling pints. Take a look at the Fulton Taproom experience to guide you on your journey.
Mpls.St.Paul Magazine | mspmag.com
© 2016 MSP Communications, Inc. All rights reserved
About Us | Contact Us | Media Kit | Pressroom | Subscriber Services
RSS Feeds | Site Map |
Privacy Policy | Terms of Service

subset: commoncrawl


text: Courses in Biostatistics (BIOS)BIOS 200 - Med Biostatistics&EpidemiologyIntroductory design and analysis of medical studies. Epidemiological concepts, case-control and cohort studies. Clinical trials. Students evaluate statistical aspects of published health science studies. Prerequisites: STAT 111, STAT 141 or STAT 143; or STAT 211. Cross-listed with: STAT 200. Credits: 3.00BIOS 211 - Statistical Methods IFundamental concepts for data analysis and experimental design. Descriptive and inferential statistics, including classical and nonparametric methods, regression, correlation, and analysis of variance. Statistical software. Prerequisite: Junior standing. Cross-listed with: STAT 211. Credits: 3.00BIOS 221 - Statistical Methods IIMultiple regression and correlation. Basic experimental design. Analysis of variance (fixed random and mixed models). Analysis of covariance. Computer software usage. Cross-listed with: STAT 221. Credits: 3.00BIOS 223 - Applied Multivariate AnalysisMultivariate normal distribution. Inference for mean vectors and covariance matrices. Multivariate analysis of variance (MANOVA), discrimination and classification, principal components, factor analysis. Prerequisite: Any 200 level Statistics course; STAT 221 or STAT 225 recommended; matrix algebra recommended. Cross-listed with: STAT 223. Credits: 3.00BIOS 229 - Survival AnalysisProbabilistic models and inference for time-to-event data. Censored data, life tables, Kaplan-Meier estimation, logrank tests, proportional hazards regression. Specialized applications (e.g. clinical trials, reliability). Prerequisite: Any 200 level Statistics course; one year of calculus. Cross-listed with: STAT 229. Credits: 3.00BIOS 231 - Experimental DesignRandomization, complete and incomplete blocks, cross-overs, Latin squares, covariance analysis, factorial experiments, confounding, fractional factorials, nesting, split plots, repeated measures, mixed models, response surface optimization. Prerequisites: BIOS 211 (BIOS 221 recommended). Cross-listed with: STAT 231. Credits: 3.00BIOS 235 - Categorical Data AnalysisMeasures of association and inference for categorical and ordinal data in multiway contingency tables. Log linear and logistic regression models. Prerequisite: BIOS 211. Cross-listed with: STAT 235. Credits: 3.00BIOS 241 - Statistical InferenceIntroduction to statistical theory; related probability fundamentals, derivation of statistical principles, and methodology for parameter estimation and hypothesis testing. Pre/co-requisites: BIOS 151, BIOS 153 or BIOS 25; BIOS 141 or equivalent; MATH 121. Cross-listed with: STAT 241. Credits: 3.00BIOS 251 - Probability TheoryDistribution of random variables and functions of random variables. Expectations, stochastic independence, sampling and limiting distributions (central limit theorems). Concepts of random number generation. Pre/co-requisite: MATH 121; STAT 141 or STAT 153 recommended. Cross-listed with: MATH 207, STAT 251. Credits: 3.00BIOS 261 - Statistical TheoryPoint and interval estimation, hypothesis testing, and decision theory. Application of general statistical principles to areas such as nonparametric tests, sequential analysis, and linear models. Pre/co-requisites: STAT 251 or either STAT 151 or STAT 153 with Instructor permission. Cross-listed with: STAT 261. Credits: 3.00BIOS 308 - Applied BiostatisticsThe rationale and application of biostatistical methods in the biological, health and life sciences with emphasis on interpreting and reporting. Prerequisite: STAT 141 or equivalent. Cross-listed with: MPBP 308, STAT 308. Credits: 3.00BIOS 350 - Advanced Methods in BiostatEssential topics in modern biostatistics including epidemiology studies, clinical trials, statistical genetics, issues involved in secondary data analysis of complex surveys. Prerequisites: STAT 261 & STAT 200 or Instructor permission. Cross-listed with: STAT 350. Credits: 3.00BIOS 391 - Master's Thesis ResearchCredit as arranged. Credits: 1.00 to 12.00BIOS 395 - Advanced Special TopicsSee Schedule of Courses for specific titles. Credits: 1.00 to 18.00


text:
Sponsored by Austral Wright Metals - Ferrous, Non-Ferrous and High Performance Alloys
BackgroundIntroductionApplications of Grade 310/310S Stainless SteelProperties of Grade 310/310S Stainless SteelChemcial Composition of Grade 310/310S Stainless Steel Mechanical Properties of Grade 310/310S Stainless SteelPhysical Properties of Ferritic Stainless SteelFabrication of Grade 310/310S Stainless SteelMachinability of Grade 310/310S Stainless SteelWelding of Grade 310/310S Stainless SteelHeat Treatment of Grade 310/310S Stainless SteelHeat Resistance of Grade 310/310S Stainless SteelAvailable Forms of Grade 310/310S Stainless Steel
Austral Wright Metals - part of the Crane Group of Companies, is the result of the merger of two long established and well respected Australian owned metal distribution companies. Austral Bronze Crane Copper Ltd and Wright and Company Pty Ltd.
This merger has bought together Australia's leaders in the distribution of:
Grade 310 is a medium carbon austenitic stainless steel, for high temperature applications such as furnace parts and heat treatment equipment. It is used at temperatures up to 1150°C in continuous service, and 1035°C in intermittent service. Grade 310S is a low carbon version of grade 310.
Typical Applications Grade 310/310S is used in fluidised bed combustors, kilns, radiant tubes, tube hangers for petroleum refining and steam boilers, coal gasifier internal components, lead pots, thermowells, refractory anchor bolts, burners and combustion chambers, retorts, muffles, annealing covers, saggers, food processing equipment, cryogenic structures.
These grades contain 25% chromium and 20% nickel, making them highly resistant to oxidation and corrosion. Grade 310S is a lower carbon version, less prone to embrittlement and sensitisation in service. The high chromium and medium nickel content make these steels capable for applications in reducing sulphur atmospheres containing H2S. They are widely used in moderately carburising atmospheres, as encountered in petrochemical environments. For more severe carburising atmospheres other heat resisting alloys should be selected. Grade 310 is not recommended for frequent liquid quenching as it suffers from thermal shock. The grade is often used in cryogenic applications, due to its toughness and low magnetic permeability.
In common with other austenitic stainless steels, these grades cannot be hardened by heat treatment. They can be hardened by cold work, but this is rarely practiced.
The chemical composition of grade 310 and grade 310S stainless steel are summarised in the following table.
Table 1. Chemical composition % of grade 310 and 310S stainless steel
Chemical Composition
0.25 max
0.08 max
2.00 max
1.50 max
0.045 max
0.030 max
24.00 - 26.00
19.00 - 22.00
The mechanical properties of grade 310 and grade 310S stainless steel are summarised in the following table.
Table 2. Mechanical properties of of grade 310/310S stainless steel
Mechanical Properties
Grade 0.2 % Proof Stress MPa (min)
Tensile Strength MPa (min)
Elongation % (min)
Hardness (HV) (max)
The physical properties of grade 310 and grade 310S stainless steel are summarised in the following table.
Table 3. Physical properties of grade 310/310S stainless steel
Electrical Conductivity
Electrical Resistivity
Micro ohm.m
Modulus of Elasticity
Shear Modulus
Poisson's Ratio
Melting Rnage
Specific Heat
Relative Magnetic Permeability
Thermal Conductivity
Coefficient of Expansion
Fabrication Grades 310/310S are forged in the temperature range 975 - 1175°C. Heavy work is carried out down to 1050°Cand a light finish is applied to the bottom of the range. After forging annealing is recommended to relieve all stresses from the forging process. The alloys can be readily cold formed by standard methods and equipment.
Machinability Grades 310/310SS are similar in machinability to type 304. Work hardening can be a problem and it is normal to remove the work hardened layer by using slow speeds and heavy cuts, with sharp tools and good lubrication. Powerful machines and heavy, rigid tools are used.
Welding Grades 310/310S are welded with matching electrodes and filler metals. The alloys are readily welded by SMAW (manual), GMAW (MIG), GTAW (TIG) and SAW. Electrodes to AWS A5.4 E310-XX and A 5.22 E310T-X, and filler metal AWS A5.9 ER310 are used. Argon is shielding gas. Preheat and post heat are not required, but for corrosion service in liquids full post weld solution annealing treatment is essential. Pickling and passivation of the surface to remove high temperature oxides are essential to restore full aqueous corrosion resistance after welding. This treatment is not required for high temperature service, but welding slag should be thoroughly removed.
Heat Treatment Type 310/310S are solution annealed by heating to temperature range 1040 -1065°C, holding at temperature until thoroughly soaked, then water quenching.
Grades 310/310S have good resistance to oxidation in intermittent service in air up to 1035°Cand 1050°Cin continuous service. The grades are resistant to oxidation, sulphidation and carburisation.
Austral Wright Metals can supply these grades as plate, sheet and strip, bar and rod, seamless tube and pipe, welded tube and pipe, forgings and forging billet, tube and pipe fittings, wire. Corrosion Resistance Grade 310/310S is generally not used for corrosive liquid service, although the high chromium and nickel content give corrosion resistance superior to grade 304. The alloy does not contain molybdenum, so pitting resistance is quite poor. Grade 310/310S will be sensitised to intergranular corrosion after service at temperatures in range 550 - 800°C. Chloride stress corrosion cracking may take place in corrosive liquids containing chlorides at temperatures exceeding 100°C.
For more information on this source please visit Austral Wright Metals
can we used 310 s filler wire for welding of SS 304L & 310s
Do you have a review, update or anything you would like to add to this article?
Cancel reply to comment
AZoM.com provides this information service in accordance
with these terms and conditions.


text:
Three new twists on high fat low carb ketogenic diets have become popular: Primal Atkins, Paleo keto and Eco-Atkins (also known as vegan Atkins). In an exclusive interview on Wednesday, Atkins nutritionist Colette Heimowitz, author of "The New Atkins Made Easy: A Faster, Simpler Way to Shed Weight and Feel Great -- Starting Today," explained how to choose the right one for you in light of a recent study on low carb diets.
Eco-Atkins is a vegan plant-based version of the high fat low carb ketogenic Atkins plan. A new study showed that it reduces the risk of heart disease while boosting weight loss.
"This study adds to the growing body of research that confirm increasing dietary protein and fiber relative to carbohydrate enhances weight loss possibilities, at least in part by increasing satiety," Colette explained to me. However, to optimize weight loss, she feels that the percentage of carbohydrates needs to be reduced by that in the most recent study.
"Those following the lower-carb program in this study consumed up to 43% of calories a day of carbohydrate," noted Colette. Based on the Atkins phases, dieters are allowed that many carbohydrates per day only on the fourth stage of Atkins, which is the maintenance phase.
The Atkins diet teaches individuals to reduce carbohydrates while increasing protein and fats. While the early phase of induction limits food choices to protein, fats and non-starchy vegetables, subsequent phases allow "low-sugar fruits, legumes and even whole grains in reasonable quantities," said Colette.
For those questioning whether vegans and vegetarians can succeed on Atkins, the answer is "Yes" from Colette. Her cookbook
"The New Atkins for a New You Cookbook: 200 Simple and Delicious Low-Carb Recipes in 30 Minutes or Less" contains recipes that cater specifically to plant-based dieters.
In contrast to Eco-Atkins, the induction phase (sometimes called Primal Atkins) consists of 20 net carbohydrates daily, which come primarily from vegetables. Dieters are advised to consume 25 to 30 percent of their calories in the form of protein.
In terms of calories, Colette told me that the recommend range for women is 1500 to 1800. Men are advised to consume 1800 to 2000.
Vegetarians who eat dairy and eggs can follow the ketogenic Primal Atkins induction phase by emphasizing those forms of dairy. "New Atkins for a New You: The Ultimate Diet for Shedding Weight and Feeling Great" provides phase-specific details and meal plans for vegetarians.
Although the Paleo ketogenic diet also is low carb and high fat, Colette noted that the caveman diet has several guidelines that she feels makes it harder to follow than either version of the Atkins plan.
"If you are considering both diets, Atkins may be an easier entry point for many," said Colette. While Paleo dieters must avoid grains, they are allowed on later phases of the Atkins plan.
"In addition, with the Atkins Diet, you are able to incorporate approved Atkins bars, shakes and frozen meals into your plan, which makes this way of eating a little more convenient," she added. However, Colette feels that the Paleo diet deserves praise.
"Paleo's emphasis on grass-fed or free-ranging meats and locally sourced fish, seafood, vegetables and fruits is ultimately very healthy for everyone, but these foods can also be more expensive and harder to find," she qualified. "Ultimately, both diets have numerous benefits, and the choice is yours."
For vegans and vegetarians who want to try a high fat low carb ketogenic diet, a Paleo plan can be extremely challenging. The Paleo diet does not allow legumes or dairy, making it difficult for plant-based dieters to get enough protein, according to Dr. Loren Cordain, author of "The Paleo Answer: 7 Days to Lose Weight, Feel Great, Stay Young."
However, for Paleo dieters who follow the traditional plan and eat animal protein, nutritional ketosis is attainable by counting carbohydrates. By consuming zero to 50 grams of carbohydrates a day, Paleo dieters can accelerate fat burning, according to Mark Sisson, author of "The Primal Blueprint: Reprogram your genes for effortless weight loss, vibrant health, and boundless energy."
Mark notes that Paleo keto diets can be used for "aggressive weight loss efforts, provided adequate protein, fat and supplements are consumed otherwise." He adds that it can "be ideal for many diabetics."
Suggested Links
- Jimmy Moore shares how he lost 180 pounds with high fat low carb ketogenic diet
- Extreme Weight Loss preview: Mother and son team up to overcome obesity
- 'New Atkins Made Easy' boosts weight loss by boosting fiber and healthy fats
- Lose 10 pounds in seven days with the Oz-approved crash diet
- Dr. Oz: Supplement blocks 500 calories; high fat low carb diet for weight loss


text:
DragonFireSDK FAQ
Product Information
What is DragonFireSDK?
DragonFireSDK is a Microsoft Visual C/C++ library. Its API consists of C/C++ functions that call native iPhone Objective-C functions enabling iPhone App creation in Windows. DragonFireSDK is not a hack, it is 100% legal and extremely fast as you are actually using Objective-C.
Where can I buy it?
You may purchase DragonFireSDK at http://www.dragonfiresdk.com/products_new.htm.
What do I need to begin creating apps with DragonFireSDK?
In order to get started creating apps with DragonFireSDK, you will need a C/C++ compiler. DragonFireSDK supports Visual C++ starting with version 6.0 and higher. The freely available Express Editions are also supported. You may download Visual C++ from Microsoft here: http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express
What do I get when I buy DragonFireSDK?
In the installer package, you will receive a Visual C++ library that contains the Windows iPhone Simulator for DragonFireSDK, DragonFireSDK documentation as well as sample apps to explore and learn about DragonFireSDK. If you purchased an Ultimate edition, you get all of the above, plus access to the Build Center, which is for creating builds for your device. The Ultimate edition also entitles you to publish apps to the App Store.
I reformatted my hard drive. Is there any way to download DragonFireSDK again?
Yes! Please email firstname.lastname@example.com and we will take care of you.
Does my purchase include free upgrades?
Yes! Maintenance releases (those with the same version number you purchased) are free. Major updates (those with different major version numbers) require a new purchase.
How big is the DragonFireSDK download?
The DragonFireSDK installer weighs in around 5-7MB! It's very lightweight and is a "no-bloat" system.
Can I test my code on Windows?
Yes! With your project loaded in Visual C++, hit F5, and you will see your app running in our iPhone or iPad Simulator!
Is DragonFireSDK only for creating games?
No way! DragonFireSDK is an excellent platform for creating games, to be sure, but it can be all business, too! There's nothing stopping you from creating any kind of app that you can dream of!
Can I install DragonFireSDK on my desktop and my laptop computer?
As long as you only use your DragonFireSDK installation on one computer at a time, then, yes, you may definitely install your copy on two computers. If you have multiple developers that need to use DragonFireSDK concurrently, then you would need to purchase a license for each user.
Development Questions
What programming language does DragonFireSDK use?
DragonFireSDK uses standard C/C++, allowing you to leverage your existing programming language knowledge. No need to learn any proprietary language like Objective-C!
Is my code converted to Objective-C?
No conversion takes place. DragonFireSDK uses Objective-C objects under the hood on the iOS side, and when you call DragonFireSDK functions from C, you are using the native iOS objects.
Where can I find documentation?
You may find the DragonFireSDK documentation online at http://www.dragonfiresdk.net/help/DragonFireSDKHelp.html or on your computer in the directory where DragonFireSDK was installed in CHM format. There you will find each function documented with sample code.
What image file format(s) does DragonFireSDK support?
DragonFireSDK supports PNG images.
What sound file format(s) does DragonFireSDK support?
DragonFireSDK supports files in the SND format (a utility for converting WAV files to SND files is included with DragonFireSDK). DragonFireSDK also supports MP3 files.
What libraries may I (safely) include in DragonFireSDK projects?
You may add #include statements for any standard C or C++ headers, including, but not necessarily limited to:
<stdio.h> <stdlib.h> <math.h> <time.h> <string.h>
Header files that will not compile for the iOS device include, but are not limited to:
<windows.h> <winsock.h> <stdafx.h>
or any other Microsoft-specific headers.
How do I add additional code modules to my project?
If you want to add additional modules to your project, you may put your code into header (.h) files. Any code you might normally put into a .cpp file, you'll need to put into the aforementioned header file.
How do I add an image?
To load an image file in DragonFireSDK, use the ImageAdd() function. A typical call to ImageAdd() might look like this:
int MyImage = ImageAdd("Images/MyImage.png"); // Loads the image. ViewSetImage(MyView, MyImage); // Tells "MyView" to display "MyImage".
I tried adding an image and all I see is this little red square. Why?
If you see a red square where your image should be, that means that your image failed to load. It's possible your path may be incorrect, or the case of the file name does not match exactly between the source code and the name of the file on disk.
Why does an image (or sound or MP3) load on the Simulator, but not on the device?
The file system on Windows is not case sensitive, whereas the one in iOS is. If the case of the name does not match exactly the image will not load on the device.
Thus, if your file is named "MyImage.png" on the file system, but in your code you refer to it as "myimage.png", iOS will be unable to find the image because it matches the case of the file name exactly.
How do I add a view?
If you need to put an image on the screen, you need to create a view. To create a view, use the ViewAdd() function. A typical ViewAdd() call might look like this:
int MyView = ViewAdd("Images/MyImage.png", 100, 100); // Initializes a view with an image at 100, 100. ViewSetVisible(MyView, 0); // Sets the view to be invisible.
The above would load the image at "Images/MyImage.png" and display it at 100 pixels from the left side of the screen, and 100 pixels down from the top of the screen.
How do I add a sound?
If you need to load a sound, you need to use the SoundAdd() function. A typical call to SoundAdd() might look like this:
int MySnd = SoundAdd("Sounds/MySound.snd"); // Loads the sound file. SoundPlay(MySnd); // Plays the sound that was just loaded.
How do I add an MP3 that has my background music / sounds?
If you need to load an MP3, you need to use the Mp3Add() function. A typical Mp3Add() call might look like this:
int MyMp3 = Mp3Add("Sounds/MyMp3.mp3"); // Loads the MP3 file. Mp3Play(MyMp3); // Plays the MP3 file that was just loaded.
How do I add text to the screen?
To add text to the screen, you need to use the TextAdd() function. A typical TextAdd() call might look like this:
int MyText = TextAdd("This is the text I want to display", 100, 100, MyFont);
The above would put the text "This is the text I want to display" at 100 pixels from the left side of the screen and 100 pixels down from the top of the screen using the font represented by MyFont.
How do I create a font?
There are two types of fonts available in DragonFireSDK: bitmap fonts and native fonts. Bitmap fonts are composed of PNG images for each letter, number or symbol in the font. Native fonts use the built in font rendering in the device (or simulator). In each case, you would need to use the FontAdd() function.
Bitmap fonts
A typical FontAdd() call to create a bitmap font might look like this:
int MyFont = FontAdd("Fonts/MyFont");
The above call tells the font rendering engine to use the specified folder to locate the images for the bitmap font.
Native fonts
A typical FontAdd() call to create a native font might look like this:
int MyFont = FontAdd("Helvetica", "Regular", 12, 0xFFFFFF);
The above call tells the font rendering engine to create a font object using Helvetica font, Regular (meaning no styles such as italic or bold applied), 12 point, white color (the color is expressed as a hexadecimal number, representing an RGB value).
How do I add an edit field to the screen?
If you need to get text input from the user, you would need to use the EditAdd() function. A typical call to EditAdd() might look like this:
int MyEdit = EditAdd(10, 50, 50);
The example above would put an edit field at 10 pixels from the left side of the screen, 50 pixels down from the top and would make the edit field 50 pixels wide.
Is the built-in iOS keyboard supported?
Yes! Simply add an edit control with EditAdd() and when the user touches the edit control, the iOS keyboard will be displayed. When the user taps "Done" on the keyboard, the keyboard will be dismissed.
What is AppMain()?
The AppMain() function is where your app will begin its life cycle. This is where you will place all of the code to initialize your application. Here you will create all of your images, views, sounds, etc.
What is AppExit()?
The AppExit() function is where your app will end its life cycle. This is where you will clean up any memory you may have allocated or save any data you need to save.
What is OnTimer()?
The OnTimer() function is your app's main loop. This function gets called 30 times per second, and this is where you will perform any animations or anything else you need to do in your app.
Does DragonFireSDK support Retina displays?
Absolutely! In order to support the higher resolution Retina displays on devices that have them, simply include "@2x" (Retina and Retina HD displays, including iPhone 6) or "@3x" (for iPhone 6 Plus Retina HD) versions of your images and they will be used in place of your lower resolution images. For example, say you have an image named "MyImage.png". The Retina display version of that file would be named "firstname.lastname@example.com" (or "firstname.lastname@example.com"). The device looks for image files with "@2x" or "@3x" infix on devices with Retina and Retina HD displays.
How can I drag an image around on the screen?
It's easy with DragonFireSDK to move images around the screen in response to a touch event. The code snippet below shows just how easy it is!
Note: You could also use code like this to scroll a very long image. Just update the Y coordinate, and you have a scrolling page...
#include "DragonFireSDK.h" int MyView; int MyViewWidth; int MyViewHeight; // This is the callback for when the view gets touched: int MyViewEvent(int id, int event, int x, int y) { if (event==2) // Event 2 = Move Event. { // Calculate new x and y values so that the image will be centered under the touch: int NewX = x - (MyViewWidth / 2); int NewY = y - (MyViewHeight / 2); // Position the view: ViewSetxy(MyView, NewX, NewY); } return(0); } void AppMain() { // Load the image into a view and set a callback: MyView=ViewAdd("Images/Ball.png", 0, 0, MyViewEvent, 1); // Calculate the view's width and height so we can center it under the touch: MyViewWidth=ViewGetWidth(MyView); MyViewHeight=ViewGetHeight(MyView); } void OnTimer() { } void AppExit() { }
How might I detect a swipe gesture in DragonFireSDK?
To detect a swipe gesture in DragonFireSDK, you need to keep track of where the user begins to drag their finger and once the distance travelled reaches a certain threshold, you can determine that a swipe has occurred.
The code snippet below shows a simple way to detect swipe gestures in each direction (up, down, left and right).
#include "DragonFireSDK.h" const int VERTICAL_PAGES=3; // Number of vertical "pages" to show const int HORIZONTAL_PAGES=8; // Number of horizontal "pages" to show const int PAGE_WIDTH=320; // Page width for iPhone is 320; iPad is 768 const int PAGE_HEIGHT=480; // Page height for iPhone is 480; iPad is 1024 const int SWIPE_THRESHOLD=100; // How far we need to drag our finger to make a swipe int MyPageView; int SwipeStartx; int SwipeStarty; bool Swiping=false; // SwipeLeft() shifts the big view to the left by the screen width until we hit our page limit void SwipeLeft() { int newx = ViewGetx(MyPageView)-PAGE_WIDTH; if (newx<(HORIZONTAL_PAGES-1)*-PAGE_WIDTH) newx=(HORIZONTAL_PAGES-1)*-PAGE_WIDTH; ViewSetxy(MyPageView, newx, ViewGety(MyPageView)); } // SwipeRight() shifts the big view to the right by the screen width until x gets to 0 void SwipeRight() { int newx = ViewGetx(MyPageView)+PAGE_WIDTH; if (newx > 0) newx = 0; ViewSetxy(MyPageView, newx, ViewGety(MyPageView)); } // SwipeDown() shifts the big view down by the screen height until y gets to 0 void SwipeDown() { int newy = ViewGety(MyPageView)+PAGE_HEIGHT; if (newy > 0) newy = 0; ViewSetxy(MyPageView, ViewGetx(MyPageView), newy); } // SwipeUp() shifts the big view up by the screen height until we hit our page limit void SwipeUp() { int newy = ViewGety(MyPageView)-PAGE_HEIGHT; if (newy<(VERTICAL_PAGES-1)*-PAGE_HEIGHT) newy=(VERTICAL_PAGES-1)*-PAGE_HEIGHT; ViewSetxy(MyPageView, ViewGetx(MyPageView), newy); } int OnTouch(int id,int event,int x,int y) { if (event==1) { Swiping=true; SwipeStartx=x; SwipeStarty=y; } else if (event==2 && Swiping) { // In each case, we are checking to see that the touch has travelled // at least SWIPE_THRESHOLD pixels before deciding that a swipe has occurred. if ((x-SwipeStartx)>SWIPE_THRESHOLD) { SwipeRight(); Swiping=false; } else if ((SwipeStartx-x)>SWIPE_THRESHOLD) { SwipeLeft(); Swiping=false; } else if ((y-SwipeStarty)>SWIPE_THRESHOLD) { SwipeDown(); Swiping=false; } else if ((SwipeStarty-y)>SWIPE_THRESHOLD) { SwipeUp(); Swiping=false; } } else if (event==3) { Swiping=false; } return(0); } void AppMain() { MyPageView=ViewAdd("Images/MyBigImage.png", 0, 0); TouchAdd(0, 0, PAGE_WIDTH, PAGE_HEIGHT, OnTouch, 0); } void AppExit() { } void OnTimer() { }
How can I make Random() "more random"?
The Randomize() function that initializes the random number generator in DragonFireSDK uses the same value to set the seed for random numbers, so it will use the same seed each time your app starts for the random number generator.
If you want to have a more genuinely random set of random numbers, you can do so by using the time() function in <time.h> to set the random seed each time your app starts to a different value each time by using the RandomSetSeed() function.
#include "DragonFireSDK.h" #include <time.h> const int RANDOM_MAX=100; int RandomNumber; int Pass=0; void AppMain() { RandomSetSeed(time(NULL)); } void AppExit() { } // Increment Pass each time OnTimer() gets called. When it hits 30 // get a random number and print it to the console then reset it. // This has the effect of printing a random number to the console once per second. void OnTimer() { Pass++; if (Pass>30) { RandomNumber=Random(RANDOM_MAX); printf("Random #:%d",RandomNumber); Pass=0; } }
What functions would I use to read or write data to file(s) in Documents?
All iOS applications have a writable folder called "Documents". In this location, you can save configuration files, game data, high scores, you name it! DragonFireSDK provides the following functions for handling files: FileCreate() creates a new file on disk. FileOpen() opens an existing file and returns a handle to the file. FileRead() reads data from the file into a buffer. FileWrite() writes data from a buffer to the file. FileSeek() sets the location in the file where reads and writes will occur. Please see the DragonFireSDK documentation for more information on "File" functions.
How do I ship a file for the Documents folder?
You may not ship writable files in your app's Documents folder, but you can include them in your Assets folder. The first time your app runs, you can load the file from Assets and then write it to Documents. Here is an example of how to do this:
#include "DragonFireSDK.h" int MyFile; int MyNewFile; char MyFileBuffer[200]; void AppMain() { MyFile=FileOpen("MyFile.txt"); if (!MyFile) { MyFile=FileOpenAsset("MyFile.txt"); FileRead(MyFile, MyFileBuffer, 200); MyNewFile=FileCreate("MyFile.txt"); FileWrite(MyNewFile, MyFileBuffer, 200); FileClose(MyNewFile); } else { FileRead(MyFile, MyFileBuffer, 200); } if (MyFile) FileClose(MyFile); } void AppExit() { } void OnTimer() { }
The above sample tries to load the file "MyFile.txt" and if this file does not exist, it is opened from Assets, and then written to Documents for the next run of the application. Please see the online DragonFireSDK documentation for more information on the "File" functions.
How do I create a High Scores file for my app?
The sample below should get you started with creating a high scores table for your app. This example checks for an existing "Scores.dat" file and creates a default one with the names of the ghosts from a very popular classic video game if the file does not exist:
#include "DragonFireSDK.h" #include <string.h> // Constants to be used below: // You can change these to suit your particular needs. const int SCORE_MAX = 100; // Number of high score records to store const int NAME_LEN = 50; // Max length of the name in the file const char SCORES_FILE_NAME[NAME_LEN] = "Scores.dat"; // Name of the high scores file // Define the high score record structure: typedef struct { char name[NAME_LEN]; int score; } score_record; // We will keep track of the top SCORE_MAX scores: score_record scores[SCORE_MAX]; // File Handle for our scores file: int ScoresFile; // Clears the entire array of score records: void ClearScores() { int i; for (i=0;i<SCORE_MAX;i++) { scores[i].name[0]=0; scores[i].score=0; } } // Saves the record array to a file: void SaveScores() { int i; ScoresFile=FileCreate((char *)SCORES_FILE_NAME); for (i=0;i<SCORE_MAX;i++) { FileWrite(ScoresFile, (char *)&scores[i], sizeof(score_record)); } FileClose(ScoresFile); } // Inserts a new high score into the appropriate spot in the array of records: void InsertScore(char *name,int score) { int i,j; // Find the index for insertion. Matching scores that come later will be added after existing score records: for (i=0;i<SCORE_MAX;i++) { if (score>scores[i].score) break; } // Start at the end of the list and shift each value down until we get to the insertion point: for (j=SCORE_MAX-1;j>0;j--) { strcpy(scores[j].name, scores[j-1].name); scores[j].score=scores[j-1].score; if (j==i) break; } // Insert the new score: strcpy(scores[i].name, name); scores[i].score=score; SaveScores(); } // Creates a new save game file with names of ghosts from a popular classic video game: void CreateDefaultScoresFile() { ClearScores(); strcpy(scores[0].name, "Inky"); scores[0].score=1500; strcpy(scores[1].name, "Blinky"); scores[1].score=1400; strcpy(scores[2].name, "Pinky"); scores[2].score=1300; strcpy(scores[3].name, "Clyde"); scores[3].score=1200; SaveScores(); } void ReadScoreRecord(int index) { ScoresFile=FileOpen((char *)SCORES_FILE_NAME); if (ScoresFile) { FileSeek(ScoresFile, (index * sizeof(score_record))); FileRead(ScoresFile, (char *)&scores[index], sizeof(score_record)); } FileClose(ScoresFile); } // Loads the scores from the file. Creates a new default one if none exists yet: void LoadScores() { ScoresFile=FileOpen((char *)SCORES_FILE_NAME); if (!ScoresFile) { CreateDefaultScoresFile(); ScoresFile=FileOpen((char *)SCORES_FILE_NAME); } FileClose(ScoresFile); for (int i=0;i<SCORE_MAX;i++) { ReadScoreRecord(i); } } void DeleteScores() { FileClose(ScoresFile); FileDelete((char *)SCORES_FILE_NAME); } int OnDeleteFile(int id) { DeleteScores(); return(1); } void AppMain() { int i; ButtonAdd("Images/DeleteFile", 100, 100, OnDeleteFile, 1); DeleteScores(); LoadScores(); // Print all of the high score records to the console: for (i=0;i<SCORE_MAX;i++) { printf("High Score record #%d: NAME=%s\t\tSCORE=%d\n",i,scores[i].name,scores[i].score); } InsertScore("Mister Cool", 1000000); } void AppExit() { } void OnTimer() { }
Can I play a YouTube video, open the SMS messenger, open the Phone dialer, etc. with DragonFireSDK?
Yes! Using BrowserLaunch() you can launch various built-in apps based on the URL you pass. See the example below for more information:
#include "DragonFireSDK.h" int AppStoreButton; int SMSButton; int DialerButton; int MapsButton; int MailButton; int WebButton; int VideoButton; float Latitude; float Longitude; int OnButton(int id) { char URL[300]; switch (id) { case 1: // Go to the App Store sprintf(URL, "http://itunes.apple.com/us/app/ditto/id363392316?mt=8&ls=1"); break; case 2: // Open the SMS application sprintf(URL, "sms:5555555555"); break; case 3: // Dial a phone number sprintf(URL, "tel://5555555555"); break; case 4: // Open the Maps Application LocationGet(Latitude, Longitude); sprintf(URL, "http://maps.google.com/maps?q=%f,%f", Latitude, Longitude); break; case 5: // Open the Mail Application sprintf(URL, "mailto:email@example.com?subject=Ignore"); break; case 6: // Open Mobile Safari sprintf(URL, "http://www.dragonfiresdk.com"); break; case 7: // open YouTube sprintf(URL, "http://www.youtube.com/watch?v=uDueddAn6zM"); break; default: break; } BrowserLaunch(URL); return(1); } void AppMain() { LocationMonitorLocation(1); AppStoreButton = ButtonAdd("Images/AppStore", 10, 80, OnButton, 1); SMSButton = ButtonAdd("Images/SMS", 10, 140, OnButton, 2); DialerButton = ButtonAdd("Images/Dialer", 10, 200, OnButton, 3); MapsButton = ButtonAdd("Images/Maps", 10, 260, OnButton, 4); MailButton = ButtonAdd("Images/Mail", 10, 320, OnButton, 5); WebButton = ButtonAdd("Images/Safari", 10, 380, OnButton, 6); VideoButton = ButtonAdd("Images/YouTube", 10, 440, OnButton, 7); AdBannerInit(0); } void OnTimer() { } void AppExit() { }
How can I perform collision detection?
Here is a short code sample that will place some images of circles at random locations and they will proceed to bounce off the walls as well as each other. Feel free to play around with this code to see how it works!
#include "DragonFireSDK.h" const int SCREEN_WIDTH=320; const int SCREEN_HEIGHT=480; const float STEP=0.0025f; const int MAX_BALLS=15; typedef struct { int ViewHandle; float XVelocity; float YVelocity; } BallInfo; int BallWidth; int BallHeight; int BallImage; BallInfo Balls[MAX_BALLS]; float xcur; float ycur; float x2cur; float y2cur; float collx; float colly; float aci; float bci; float mag; float d; void AppMain() { Randomize(); BallImage=ImageAdd("Images/Circle.png"); BallWidth=ImageGetWidth(BallImage); BallHeight=ImageGetWidth(BallImage); for (int i=0; i<MAX_BALLS; i++) { Balls[i].ViewHandle=ViewAdd(BallImage, Random(SCREEN_WIDTH-BallWidth), Random(SCREEN_HEIGHT-BallHeight)); Balls[i].XVelocity=Random(SCREEN_WIDTH)/Random(SCREEN_WIDTH)<SCREEN_WIDTH/2 ? -1000 : 1000; Balls[i].YVelocity=Random(SCREEN_HEIGHT)/Random(SCREEN_HEIGHT)>SCREEN_HEIGHT/2 ? -1000 : 1000; } } void OnTimer() { // Get the circles moving: for (int i=0; i<MAX_BALLS; i++) { xcur=ViewGetx(Balls[i].ViewHandle); ycur=ViewGety(Balls[i].ViewHandle); xcur+=Balls[i].XVelocity*STEP; ycur+=Balls[i].YVelocity*STEP; if (xcur+BallWidth>SCREEN_WIDTH) { xcur=SCREEN_WIDTH-BallWidth; Balls[i].XVelocity*=-1; } if (xcur<0) { xcur=0; Balls[i].XVelocity*=-1; } if (ycur+BallHeight>SCREEN_HEIGHT) { ycur=SCREEN_HEIGHT-BallHeight; Balls[i].YVelocity*=-1; } if (ycur<0) { ycur=0; Balls[i].YVelocity*=-1; } // Collision detection: for (int j=i+1; j<MAX_BALLS; j++) { x2cur=ViewGetx(Balls[j].ViewHandle); y2cur=ViewGety(Balls[j].ViewHandle); d=sqrtf((x2cur-xcur)*(x2cur-xcur)+(y2cur-ycur)*(y2cur-ycur)); if (d>BallWidth || d==0) continue; collx=(xcur-x2cur)/d; colly=(ycur-y2cur)/d; aci=Balls[i].XVelocity*collx + Balls[i].YVelocity*colly; bci=Balls[j].XVelocity*collx + Balls[j].YVelocity*colly; Balls[i].XVelocity += (bci-aci)*collx; Balls[i].YVelocity += (bci-aci)*colly; Balls[j].XVelocity += (aci-bci)*collx; Balls[j].YVelocity += (aci-bci)*colly; collx = ViewGetx(Balls[j].ViewHandle)-ViewGetx(Balls[i].ViewHandle); colly = ViewGety(Balls[j].ViewHandle)-ViewGety(Balls[i].ViewHandle); mag = sqrtf(collx*collx + colly*colly); x2cur += (collx/mag) * (BallWidth-d); y2cur += (colly/mag) * (BallWidth-d); ViewSetxy(Balls[j].ViewHandle, x2cur, y2cur); } ViewSetxy(Balls[i].ViewHandle, xcur, ycur); } } void AppExit() { }
What functions would I use to draw lines and shapes on the screen?
DragonFireSDK provides lots of functions that allow you to draw on the screen. First, you need to create a "draw surface" on which to draw your shapes. To do this, you would need to call DrawAdd(). A typical DrawAdd() call might look like this:
int MyDrawSurface = DrawAdd(0, 0, 320, 480);
You can then draw on the surface using any of the functions that start with "Draw". For example, If you wanted to draw a square on the surface, you would call DrawSquare(). A typical call to DrawSquare() might look like this:
DrawSquare(MyDrawSurface, 50, 50, 100, 100);
Please refer to the DragonFireSDK documentation online for more information about the other "Draw" functions.
What functions would I use to manipulate individual pixels on the screen?
DragonFireSDK provides the ability to manipulate individual pixels on a "bitmap surface". To create a bitmap surface, you would need to call the BitmapAdd() function. A typical call to BitmapAdd() might look like this:
int MyBitmapSurface = BitmapAdd(100, 100, 100, 100);
This creates a bitmap surface at 100 pixels to the right of the left side of the screen and 100 pixels from the top. It also sets the width and height to 100 pixels each.
If you wanted to set an individual pixel in a bitmap to a certain color, you would need to call BitmapSetPixel(). A typical call to BitmapSetPixel() might look like this:
BitmapSetPixel(MyBitmapSurface, 20, 20, 255);
This would set the pixel at 20 pixels to the right of the left side of the bitmap surface and 20 pixels from the top of the bitmap surface to the color 255 (white).
The sample below creates a gradient that shifts from black to blue on the x axis and from black to red on the y axis:
#include "DragonFireSDK.h" const int SCREEN_WIDTH=320; const int SCREEN_HEIGHT=480; int MyBitmap; float Red; float Green; float Blue; void AppMain() { MyBitmap = BitmapAdd(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); Red=0; Green=0; Blue=0; for (int x = 0; x < SCREEN_WIDTH; x++) { Blue+=(255.0f/SCREEN_WIDTH); // Screen will go from black to blue starting at the left. for (int y = 0; y < SCREEN_HEIGHT; y++) { Red+=(255.0f/SCREEN_HEIGHT); // Screen will go from black to red from top to bottom. if (Red>=255) Red=0; BitmapSetPixel(MyBitmap, x, y, Red, Green, Blue, 255); } } BitmapUpdate(MyBitmap); } void AppExit() { } void OnTimer() { }
Please refer to the DragonFireSDK documentation online for more information about "Bitmap" functions.
What function would I use to communicate with a Web Service?
DragonFireSDK provides a function called NetSend() for communication with remote servers and provides a method for getting a response from the server. A typical call to NetSend() might look like this:
int OnResponse(int event, char *response, int length); NetSend("http://www.mysite.com?var1=x&var2=y", OnResponse);
The OnResponse line above is a forward declaration for a callback function to be called when the server gives a response to the app. That function is where you would want to parse the response from your server and perform any other necessary actions. Please refer to the DragonFireSDK documentation online for more information about the NetSend() function.
Can DragonFireSDK support Unicode strings?
Yes and no. Unicode strings should work correctly on the device if you save your file with UTF-8 encoding. To achieve this in Visual C++, simply go to the File menu and select "Advanced Save Options..." and select "UTF-8" as the encoding. When your file is saved with this encoding and uploaded to the Build Center, your Unicode string should appear correctly in your Texts as well as your Edits. Once you do this, the following examples should work correctly (each one says "I like it!" in a different language...):
int MyText = TextAdd(0, 0, "Мне нравится!");
int MyText = TextAdd(0, 0, "אני אוהב את זה!");
int MyText = TextAdd(0, 0, "我喜歡它!");
General device questions
How do I detect when the user tilts the device?
To read data from the device's accelerometer, you have three functions available: TiltGetx(), TiltGety() and TiltGetz().
TiltGetx() returns a value between -1000 (device tilted left) and 1000 (device tilted right) depending on the left / right orientation of the device in a 3D space. A zero value indicates that the device is resting level on this axis.
TiltGety() returns a value between -1000 (device tilted top down) and 1000 (device bottom down) depending on the top / bottom orientation of the device in a 3D space. A zero value indicates that the device is resting level on this axis.
TiltGetz() returns a value between -1000 (device tilted facing the ground) and 1000 (device tilted facing the sky) depending on the face up / face down orientation of the device in a 3D space.
The Accelerate sample from DragonFireSDK illustrates how to use the "Tilt" functions to move an image of a ball around the screen in response to the user tilting the device:
#include "DragonFireSDK.h" int BallImage; int BallView; void AppMain() { // Set up an image of a ball to move around the screen: BallImage = ImageAdd("Images/Ball.png"); BallView = ViewAdd(BallImage, 0, 0); AutoRotateInit(0, NULL); } void OnTimer() { int BallX, BallY; int AccX, AccY; // Get tilt (accelerometer) data for each axis. AccX = TiltGetx(); AccY = TiltGety(); // Update the ball's next X and Y values based on G-Force and the strength of gravity: BallX = ViewGetx(BallView) + (AccX / 100); BallY = ViewGety(BallView) + (AccY / 100); // Don't let the ball go off the screen: if (BallX >= 283) BallX = 283; if (BallX <= 0) BallX = 0; if (BallY >= 443) BallY = 443; if (BallY <= 0) BallY = 0; // Update the ball's position: ViewSetxy(BallView, BallX, BallY); } void AppExit() { }
How can I convert the tilt of the device to an angle in degrees?
If you would like to display the tilt angle of the device in degrees, you can certainly do that with DragonFireSDK! Here's a quick code sample that shows you how to do this:
#include "DragonFireSDK.h" char TiltText[100]; int TextTilt; void AppMain() { AutoRotateInit(0, NULL); int MyFont=FontAdd("Helvetica", "Regular", 17, 0x00FF00); TextTilt=TextAdd(10,10, "Tilt angle:", MyFont); } void OnTimer() { float xtilt; float ytilt; float angle; xtilt=TiltGetx()/1000.0f; ytilt=TiltGety()/1000.0f; angle=atan2f(ytilt, xtilt); // get the tilt in radians for the device orientation... angle*=57.2957795f; // convert radians to degrees... sprintf(TiltText, "Tilt angle: %f degrees", angle); TextSetText(TextTilt, TiltText); } void AppExit() { }
The sample above will report the device angle as follows:
-90 degrees = device is in the standard "portrait right side up" orientation. 0 degrees = device is tilted so that the "home key" is on the left. 90 degrees = device is tilted in the "portrait upside down" orientation. 180 degrees = device is tilted so the the "home key" is on the right.
How do I get general information about the device?
If you need to know specific information about the device your app is running on, such as UDID, Model Name, Device Type, Battery Level, and so on, you may use the "Device" functions to get those values.
The DeviceInfo sample from DragonFireSDK illustrates how to use the "Device" functions:
#include "DragonFireSDK.h" int MyFont; int MyFontSmall; int BatteryLevelText; int BatteryStateText; int LocaleIDText; int ModelText; int MultitaskingText; int NameText; int SystemNameText; int SystemVersionText; int UDIDText; int UITypeText; int Value; char ValueText[50]; char TextBuffer[100]; void GetBatteryStateText() { Value = DeviceGetBatteryState(); switch (Value) { case 0: sprintf(TextBuffer, "Battery State: Unknown"); break; case 1: sprintf(TextBuffer, "Battery State: Unplugged"); break; case 2: sprintf(TextBuffer, "Battery State: Charging"); break; case 3: sprintf(TextBuffer, "Battery State: Full"); break; default: sprintf(TextBuffer, "Battery State: Unknown"); break; } } void AppMain() { LandscapeMode(); DeviceSetBatteryMonitoring(1); MyFont = FontAdd("Helvetica", "Regular", 18, 0x00FF00); Value = DeviceGetBatteryLevel(); sprintf(TextBuffer, "Battery Level: %d%%", Value); BatteryLevelText = TextAdd(10, 10, TextBuffer, MyFont); GetBatteryStateText(); BatteryStateText = TextAdd(10, 40, TextBuffer, MyFont); DeviceGetLocaleID(ValueText, 50); sprintf(TextBuffer, "Locale ID: %s", ValueText); LocaleIDText = TextAdd(10, 70, TextBuffer, MyFont); DeviceGetModel(ValueText, 50); sprintf(TextBuffer, "Model: %s", ValueText); ModelText = TextAdd(10, 100, TextBuffer, MyFont); Value = DeviceGetMultitaskingSupported(); if (Value) sprintf(TextBuffer, "Multitasking Supported", ValueText); else sprintf(TextBuffer, "Multitasking Not Supported", ValueText); MultitaskingText = TextAdd(10, 130, TextBuffer, MyFont); DeviceGetName(ValueText, 50); sprintf(TextBuffer, "Name: %s", ValueText); NameText = TextAdd(10, 160, TextBuffer, MyFont); DeviceGetSystemName(ValueText, 50); sprintf(TextBuffer, "System Name: %s", ValueText); SystemNameText = TextAdd(10, 190, TextBuffer, MyFont); DeviceGetSystemVersion(ValueText, 50); sprintf(TextBuffer, "System Version: %s", ValueText); ModelText = TextAdd(10, 220, TextBuffer, MyFont); DeviceGetUDID(ValueText, 50); sprintf(TextBuffer, "UDID:%s", ValueText); ModelText = TextAdd(10, 250, TextBuffer, MyFont); Value=DeviceGetUIType(); if (Value==0) sprintf(TextBuffer, "UI Type: iPhone"); else sprintf(TextBuffer, "UI Type: iPad"); UITypeText = TextAdd(10, 280, TextBuffer, MyFont); } void OnTimer() { Value = DeviceGetBatteryLevel(); sprintf(TextBuffer, "Battery Level: %d%", Value); TextSetText(BatteryLevelText, TextBuffer); GetBatteryStateText(); TextSetText(BatteryStateText, TextBuffer); } void AppExit() { }
How do I set the screen to landscape mode?
It's simple to set the device to landscape mode. Just call the LandscapeMode() function. If you ever need to go back to portrait mode, call PortraitMode().
How do I control auto-rotation of the device?
It's a snap with DragonFireSDK. All you need to do is to call AutoRotateInit() with the appropriate flag, and that will tell your app which orientations it will support. Please see the DragonFireSDK documentation for AutoRotateInit() for more information about auto-rotation.
How do I keep the screen's back light from dimming?
If you have a game that uses the "Tilt" functions for input (for example), you might not want the screen to dim while your game is running. To prevent the screen dimming from kicking in after the user-specified period, simply call LcdStayOn(1).
How do I make the device vibrate?
It's a piece of cake. Simply call the Vibrate() function. Note: If the device does not have a vibration motor, then this call will have no effect.
How can I get information about the location of the device (latitude / longitude)?
If you want to get the location of the device, you'll want to use the "Location" functions. The most common "Location" function would be LocationGet(). A typical call to LocationGet() might look like this:
float lat; float lng; LocationGet(lat, lng);
The above call will do several things. It will cause a dialog to be displayed to the user (if they have not yet agreed to let your app collect location data) asking for permission to allow location updates. It will then use the best available means to determine the device's location. If the device has GPS, it will use that. If it has only WiFi, it will use that service to determine the location of the device.
Here is the code from the Location sample in DragonFireSDK to give you a better idea of how the "Location" functions work:
#include "DragonFireSDK.h" int MyFont; int LatitudeText; int LongitudeText; int AltitudeText; int CourseText; int HorizontalAccuracyText; int SpeedText; int VerticalAccuracyText; int HeadingText; int DistanceToCupertinoText; int DistanceBetweenCupertinoAndEquator; char TextBuffer[100]; // Cupertino, California is located at approximately 37.33294444,-122.0325556 float CupertinoLat = 37.33294444f; float CupertinoLng = -122.0325556f; void AppMain() { LandscapeMode(); // Begin monitoring location LocationMonitorLocation(1); LocationMonitorHeading(1); MyFont = FontAdd("Helvetica", "Regular", 24, 0x00FF00); LatitudeText = TextAdd(10, 10, "Latitude:", MyFont); LongitudeText = TextAdd(10, 40, "Longitude:", MyFont); AltitudeText = TextAdd(10, 70, "Altitude:", MyFont); CourseText = TextAdd(10, 100, "Course:", MyFont); HorizontalAccuracyText = TextAdd(10, 130, "Horizontal Accuracy:", MyFont); SpeedText = TextAdd(10, 160, "Speed:", MyFont); VerticalAccuracyText = TextAdd(10, 190, "Vertical Accuracy:", MyFont); HeadingText = TextAdd(10, 220, "Heading:", MyFont); DistanceToCupertinoText = TextAdd(10, 250, "Distance to Cupertino:", MyFont); DistanceBetweenCupertinoAndEquator = TextAdd(10, 280, "Cupertino to 0, 0:", MyFont); } void OnTimer() { float lat; float lng; LocationGet(lat, lng); sprintf(TextBuffer, "Latitude: %f", lat); TextSetText(LatitudeText, TextBuffer); sprintf(TextBuffer, "Longitude: %f", lng); TextSetText(LongitudeText, TextBuffer); float altitude; altitude = LocationGetAltitude(); sprintf(TextBuffer, "Altitude: %fm", altitude); TextSetText(AltitudeText, TextBuffer); float course; course = LocationGetCourse(); sprintf(TextBuffer, "Course: %f degrees", course); TextSetText(CourseText, TextBuffer); float horizontalAccuracy; horizontalAccuracy = LocationGetHorizontalAccuracy(); sprintf(TextBuffer, "Horizontal Accuracy: %fm", horizontalAccuracy); TextSetText(HorizontalAccuracyText, TextBuffer); float speed; speed = LocationGetHorizontalAccuracy(); sprintf(TextBuffer, "Speed: %fm/s", speed); TextSetText(SpeedText, TextBuffer); float verticalAccuracy; verticalAccuracy = LocationGetVerticalAccuracy(); sprintf(TextBuffer, "Vertical Accuracy: %fm", verticalAccuracy); TextSetText(VerticalAccuracyText, TextBuffer); float heading; heading = LocationGetHeading(); sprintf(TextBuffer, "Heading: %f degrees", heading); TextSetText(HeadingText, TextBuffer); float dist; dist = LocationDistanceFrom(CupertinoLat, CupertinoLng); sprintf(TextBuffer, "Distance to Cupertino: %fm", dist); TextSetText(DistanceToCupertinoText, TextBuffer); dist = LocationDistanceBetween(CupertinoLat, CupertinoLng, 0.0f, 0.0f); sprintf(TextBuffer, "Cupertino to 0, 0: %fm", dist); TextSetText(DistanceBetweenCupertinoAndEquator, TextBuffer); } void AppExit() { }
Does DragonFireSDK support In-App Purchase?
Absolutely! Use of In-App Purchase requires that you set up a store in iTunes Connect with at least one item for sale.
You need to declare a callback to receive notifications from iTunes by using the StoreInit() function:
The call above sets the function OnStoreEvent() the receive callbacks from iTunes and sets the delimiter for field data to comma. If you need to specify a different delimiter, you can do so with StoreInit()
Your OnStoreEvent() callback might look something like this:
void OnStoreEvent(int type,int flag,int value,char *desc) { switch (type) { case 1: // Product Request printf("Product Request event\n"); break; case 2: // Provide Content printf("Provide Content event\n"); break; case 3: // Record Transaction printf("Record Transaction event\n"); break; } }
In this callback, type identifies the kind of callback being made. A type of 1 signifies that product request data is being delivered. This is as a result of a call to StoreRequestProductData(). You will receive a call back for each product id requested. A type of 2 signifies that the user purchased the product specified in desc. At this point, you must make the purchased content available to the user. A type of 3 signifies that you should record the transaction. This is optional.
Call StorePurchaseProduct() to initiate a purchase from your store. StorePurchaseProduct() takes a single param, product_id which is the id of the product in your store. If this does not match precisely the product id you set up in your store, this function will not result in a callback to your app.
For example, if you have a product in your store with a Product ID of "com.mycompany.myapp.myproduct1" then your call to StorePurchaseProduct() must look like this:
See iTunes Connect for more information on setting up your app's store.
My call to StorePurchaseProduct() or StoreRequestProductData() doesn't seem to work! Help!
The most common cause for calls to StorePurchaseProduct() or StoreRequestProductData() is that the requested product id does not match what is set up in the iTunes Connect In-App Purchase screen. In the iTunes Connect In-App Purchases screen, your product id should be formatted in the reverse domain name style to assure uniqueness. For example, if your app's bundle id is "com.mycompany.myapp" then it is recommended to make the product id's for your app follow the same convention, for example: "com.mycompany.myapp.product1", and so on. The "reference Name" field in the In-App Purchase screen can be anything you choose.
In your code, be sure to call StoreRequestProductData() and StorePurchaseProduct() using the very same product id.
For example:
Does DragonFireSDK support Game Center?
Yes! DragonFireSDK suppports Game Center leaderboards and achievements. In order to use Game Center with DragonFireSDK, you must have set up at least one leaderboard or achievement in iTunes Connect.
Does DragonFireSDK support Box2D?
Yes! DFSDK now supports the Box2D physics engine (v2.1.2). All you need to do is to add the following line of code to begin using Box2D:
#include <Box2D/Box2D.h>
Check out the DFSDK Box2D sample app for more information about adding physics to your app.
Box2D documentation is available here:
What are Containers?
Containers are a new feature in DragonFireSDK 2.0 that allow you to group screen elements together and treat them as a single entity.
Build Center Questions
What is the Build Center?
The DragonFireSDK Build Center is an automated, online service that will compile your DragonFireSDK code for your iOS device(s).
How do I create a build for my device?
By following the instructions on this page: http://www.dragonfiresdk.net/help/iphone_builds.htm for iPhone builds or this page: http://www.dragonfiresdk.net/help/ipad_builds.htm for iPad builds you can send your app to the Build Center and in short order, you will be able to download the build that you can install on your device. To do this, all you need to do is plug in your device, start iTunes, and drag and drop your .app folder and your .mobileprovision file onto the iTunes library. You may see this page for more information: http://www.dragonfiresdk.net/help/installing_on_your_device.htm
I received an e-mail stating that I can download my app Over the Air (OTA). Is this legit?
Yes! DragonFireSDK's Build Center will now send an e-mail to the registered address (the same e-mail you use to log in to the Build Center) with a link to download your app straight to your device! This eliminates the need to sync your app via iTunes and should be much, MUCH simpler for all of our customers.
I tapped the link for my OTA download, but it says "Unable to Download Application"... Why?
You will see this message if you try to install your app on a device for which it was not provisioned. If you need to provision additional devices, contact DragonFireSDK Support.
I never received an e-mail from the Build Center with the link to my download. Why?
If you never received your OTA download link from the Build Center, it could be because you're not checking the registered e-mail address. Otherwise, it could be that your build failed. In the latter case, please download your app from the Build Center and check to see that your build completed successfully.
I'm having an issue syncing my app in iTunes! Help!
If you have trouble getting your app to install through iTunes, there are a few steps you can take to troubleshoot the problem:
- Please verify that you created your Build.zip file correctly for Build Center processing.
- If the zip file you downloaded from the Build Center contained a file named Errors.txt, then your build failed, and it won't sync through iTunes. Correct the issues outlined in the file and submit your build again.
- If there is no Errors.txt file in the zip, move on to checking the .app folder for a file with no extension, named the same as your app. If this file does not exist, then your app build failed. The most common reason builds fail without an Errors.txt file is that the user failed to include a folder called Assets in the Build.zip.
- If the app built correctly and still fails to install in iTunes, open the .mobileprovision file and search for the UDID of the device you're trying to install the app on. If the UDID for your device does not exist in the .mobileprovision file then the app cannot be installed on your device.
How long does it take to get my app from the Build Center?
The Build Center is automated and typically processes your app build in just a few minutes. However, if you have just submitted your device's UDID, it can take around 24 business hours (between 9AM and 5PM Central Time in the USA). Once we provision your device, builds will process much faster for you.
How do I provision a new device?
You can provision your device one of two ways, depending on whether you're provisioning your first device, or if you are provisioning an additional device or devices.
Provisioning your first device
When you log in to the Build Center, if you have yet to provide the UDID of your device, you will see a field where you will be able to enter the ID of the device you want to build for. Once we provision the device (typically within one business day) any app you may have submitted will be processed and you'll be able to sync it to your device using iTunes.
Provisioning additional devices
If you need your build to run on devices other than the initial one you got free with your purchase, you may purchase additional provisions for US$5 each. Send your payment (via PayPal) to email@example.com and email DragonFireSDK Support at firstname.lastname@example.com with the UDID's to be provisioned. We will handle the rest!
How do I include my own launch image(s) and icon(s) for my app?
If you want to provide a custom launch image (splash screen) and / or icon for your app, use the tables below to create your icons, launch images and iTunes artwork images in the required dimensions:
iPhone / iPod touch requirements
|File Type
|File Name
|Image Dimensions
|Application Icon (non-Retina)
|57x57 pixels
|Application Icon (Retina)
|114x114 pixels
|Application Icon (iOS 7 and higher, including iPhone 6)
|120x120 pixels
|Application Icon (iPhone 6 Plus)
|180x180 pixels
|Launch Image (non-Retina)
|320x480 pixels
|Launch Image (Retina - 3.5 inch screen)
|640x960 pixels
|Launch Image (Retina - 4 inch screen)
|640x1136 pixels
|Launch Image (Retina HD - 4.7 inch screen)
|750x1334 pixels
|Launch Image (Retina HD - 5.5 inch screen - Portrait)
|1242x2208 pixels
|Launch Image (Retina HD - 5.5 inch screen - Landscape)
|2208x1242 pixels
|iTunes Artwork
|iTunesArtwork (note: no extension)
|1024x1024 pixels
iPad requirements
|File Type
|File Name
|Image Dimensions
|Application Icon (non-Retina)
|72x72 pixels
|Application Icon (Retina)
|144x144 pixels
|Application Icon (non-Retina iOS 7 and higher)
|76x76 pixels
|Application Icon (Retina iOS 7 and higher)
|152x152 pixels
|Launch Image (Portrait, non-Retina)
|768x1024 pixels
|Launch Image (Portrait, Retina)
|1536x2048 pixels
|Launch Image (Landscape, non-Retina)
|1024x768 pixels
|Launch Image (Landscape, Retina)
|2048x1536 pixels
|iTunes Artwork
|iTunesArtwork (note: no extension)
|1024x1024 pixels
Does it cost anything to build on the Build Center?
No! Ad hoc builds for your device are free.
App Store Distribution
I'm ready to send my app to the App Store. Where do I begin?
When you're ready to begin the App Store submission process, go to this page of the DragonFireSDK web site and follow the steps provided: http://www.dragonfiresdk.com/distributionmethod_new.htm.
Do I need an Apple Developer Account?
No. If you want to publish a free app, then Zimusoft will publish it for you. You only need to have an Apple Developer account if you plan to publish paid apps, or if your app will contain iAds, use GameCenter or In-App Purchase features.
How much does it cost to submit an app to the App Store?
Your first App Store submission is free. Subsequent submissions (including updates) cost US$10 each.
What if I want to publish a paid application?
You will need to have your own Apple Devloper Account to publish your paid app, so you can receive the proceeds you make with your app directly from Apple. We can upload your paid app to your specific Apple Developer Account for you so you can publish it yourself. Zimusoft will only publish applications that are free.
How long after my app is submitted will it take for my app to get to the App Store?
Apple typically takes around two weeks from the time an app enters "Waiting for Review" status until the app enters "Ready for Sale" status.
Do I need to submit a new CSR Request for each App Store submission?
Not usually. Signing Certificates are good for one year, and you only need one distribution certificate at any one time. If your signing certificate ever expires or if you decide to revoke the existing certificate for any reason, then you will need a new certificate (as well as a new CSR Request file).
What do you need if I created my own CSR file on my own Mac?
If you have created a Certificate Signing Request file on a Mac under your own control, we will need a .p12 file in order to digitally sign your app. In order to create a .p12 file on the Mac, open Keychain Access and select the certificate in question. Right- (or Control-) click the certificate and select "Export <certificate name>..." You may then select a password (optional) and send the newly-generated .p12 file to email@example.com with the password (if you added one) so that we can sign your App Store build.
Can I create a CSR file on my Windows computer?
If you have OpenSSL (a free and open-source program available at http://www.openssl.org) you may be able to create your own CSR file.
Once you have OpenSSL installed, you'll need to first create your own private key file by typing the command below:
openssl genrsa -out mykey.key 2048
Save the file created here. You'll need it later. Make sure not to ignore any possible errors. If you see errors, please verify that you entered everything correctly.
Now that you have your private key created, you can create your CSR file with a line like the one below:
openssl req -new -key mykey.key -out CertificateSigningRequest.certSigningRequest -subj "/firstname.lastname@example.com, CN=John Doe, C=US"
Be sure to replace the e-mail address and the name after "CN=" with your name and the country after "C=" with the appropriate two letter abbreviation of your country.
The file created by this command is what you will upload to Apple to create your signing certificate.
Once you have your distribtion_identity.cer file from Apple, you now need to convert it into a .p12 file so that DragonFireSDK staff can build and sign your app with your certificate.
First, convert the .cer file to a .pem file:
openssl x509 -in distribution_identity.cer -inform DER -out distribution_identity.pem -outform PEM
Finally, create the .p12 file for DragonFireSDK:
openssl pkcs12 -export -inkey mykey.key -in distribution_identity.pem -out distribution_identity.p12
That's all there is to it!
Apple rejected my app! Now what?
If Apple has rejected your app for any reason, they likely provided a specific reason. Address the issue provided and you'll have the opportunity to resubmit your app. If Apple still rejects your app for whatever reason, you may appeal the decision using the tools available on your Apple Developer account.
Other questions
Where do I turn when I have a question not answered here?
If you have a question that has not been answered here, you may e-mail DragonFireSDK Support at email@example.com.


text:
Ray Lewis says crime will increase without NFL| Video
Forget the rapture folks. The world just might come to an end if there is no NFL in 2011.
Baltimore Ravens linebacker Ray Lewis told ESPN reporter Sal Paolantonio he believe crime will increase if the NFL lockout prevents another season because "too many people are living through us."
Ray Lewis: "Too many people living through us. People live through us. Yeah, walk in the streets, the way I walk the streets, and I'm not talking about the people you see all the time."
Sal Paolantonio: People who work in stadiums?
Ray Lewis: Yes.
Sal Paolantonio: Fans?
Ray Lewis: Yes, yes. Who their livelihoods. Do this research. If we don't have a season, watch how much evil, which we call it crime, watch how much crime picks up if you take away our game.
Sal Paolantonio: Why do you think that would happen?
Ray Lewis: There's nothing else to do Sal.
If only Ray Lewis could have a little more passion…
In all seriousness, I'd like to hire Ray Lewis as my personal life coach after he retires. The man could probably make me believe that I could run through walls.


text:
At the rate they're going on their seemingly endless tour, The Howlin' Brothers may just receive the key to New York City tonight when they hit SubCulture on Bleecker Street tonight in support of their latest album, Trouble.
It's their third trip to the Big Apple in a little over a year, and each time, things seem to be getting bigger for the Nashville-based trio, which is comprised of Ian Craft, Jared Green, and Ben Plasse. It's an old-school way of making your name in the ever-changing music business, and that's a compliment. The only question is, how did they find a way to make Trouble in the midst of all this touring?
"That is a good question," laughs Craft. "It was crazy. Jared, our guitarist, was having a baby, and we made the record and we got right back out on the road immediately. It worked out that we had six, seven days home and we just crammed it in. And (producer) Brendan (Benson) had the same time off, so it just worked out good."
It most certainly did, with Trouble following up their breakthrough release Howl in impressive style. No, they're not revamping their sound or style, but it is a clear evolution for the band in terms of songwriting and cohesion as a group.
"I feel like we're getting more comfortable with being ourselves and trying to just write music and not think about genre-specific music," said Craft. "We're trying to write whatever comes to us on the road. That's what Trouble is all about to me; it's us all blending our songwriting together and I think it's starting to get stronger and stronger and we're becoming more of a band. It's badass."
And to think, it was all done in a week, a remarkable feat in a day and age where albums can take years to make.
"It helps being broke," laughs Craft. "We can't afford to sit out and take it all in. We're like 'all right, get us that next gig, the electric bill's due.' But I think that also adds to the element of creativity. I was reading some Hemingway and he was talking about when he was hungry. He would skip lunch and skip dinner purposely and then go look at art, and it was so much more beautiful. And I think there's something to that. There's something to being literally hungry and broke that drives creativity and drives art. And we've never been the kind to just sit around and get too particular about music. I've always been from the school of thought of that's me, that's how I played it. If it didn't totally suck, then let's use that, because that's me. I'm not going to play perfect live and I probably won't play perfect in the studio either."
So it goes without saying that the band wasn't spending too much time worrying about how they were going to follow up the critically-acclaimed Howl.
"We had no time to even think about it," he said. "We just flew in, unpacked our suitcases, recorded the album, and flew back out. We didn't even really stop to let the pressure build. That's kind of how it's been. We've been in forward motion for two and a half years now and it's a good thing because you don't have time to sit back and start doubting yourself or worrying. We're too busy just going all the time, and that's a good thing. Every time we come back from a run or go across the country, we come back and it's better than it has been. So it's definitely growing and picking up speed and we're definitely feeling it in all aspects of what's happening."
Now all that's left are more gigs, more interviews, more magazine covers, and just more Howlin' Brothers. For the Americana scene, that's welcome news, and for the Brothers, there's nothing else they'd rather be doing.
"It's such a blessing that we got all these amazing things," said Craft. "That Acoustic Guitar magazine (cover), that was outstanding. Willie Nelson was the issue before, and then us. So it's very exciting. There's buzz building and there's better attendance at shows, and there's definitely more expectations about everything, but it's just amazing. We've got our heads down, we're doing the miles and trekking along, so we haven't really stopped to have a hot tub party or anything like that yet, (Laughs) but it's been awesome."
The Howlin' Brothers play SubCulture in New York City tonight, May 21. For tickets, click here


text:
Skip to content
A compact system camera is a mirrorless camera with creative...
Those looking to shoot distant subjects like wildlife face a...
Fuji were already well established in the Compact System Camera...
The G7 aims to change the way we shoot by...
Sony Alpha 35
from Sony
The a35 expands Sony's range of fixed, translucent mirror cameras, but how does it perform?
Last year, Sony broke the trend of traditional D-SLR design and added two unique cameras to its Alpha family. Although they resembled the shape, look and functions of a standard D-SLR, the a33 and a55 featured 'translucent mirror technology' meaning that without a conventional moving mirror behind the lens mount, neither model could be classed as a true Digital Single Lens Reflex camera. Instead, these models are known as D-SLTs, with the 'T' in the name signifying the translucent technology, where rather than directing light via a mirror to the viewfinder, Sony's D-SLT cameras use electronic viewfinders (EVFs) and split the optical pathway of light between the image sensor and a phase-detection AF sensor. The a35 marks the arrival of Sony's second wave of D-SLTs and will eventually replace the a33. Can it go one better, though?
Features & Build With the same dimensions as the a33, the a35 looks almost identical to its predecessor from the front. The slender proportions of the body make it fractionally smaller than budget D-SLRs and the reduction in size is made possible by simplifying the internal mechanisms, stripping out the traditional mirror box and replacing it with a less bulky semi-translucent mirror system. Featuring an EVF instead of a conventional optical viewfinder, it offers 100% coverage and displays at a 1.15 million dot effective resolution. There's also a responsive sensor that triggers when the camera is lifted to your eye and switches the display between the screen and EVF in less than a second. At its heart, the a35 features a higher resolution 16.2Mp Exmor CMOS APS-C sized sensor (as opposed to the 14.2Mp chip inside the a33) and this produces a maximum 4912x3264 resolution. As with the a33, the a35 records JPEG and RAW formats (or both) in a 3:2 aspect ratio and the ISO range of 100-12,800 remains, as does the 15-point Phase Detection AF system which promises to deliver rapid and accurate focus tracking. Complementing the AF system, the a35 allows you to shoot a continuous burst of images at 5.5fps and if this isn't fast enough for you there's also the option of capturing a burst at 7fps using the a35's Telezoom Continuous Priority AE mode. Located via the Mode dial, this multiplies the focal length by 1.4x, so if you were to use this mode at 55mm on the 18-55mm f/3.5-5.6 kit lens, you'd effectively be shooting at 77mm. This gives you a greater chance of filling the frame with your moving subject, but also cuts resolution to 8.4Mp (3568x2368 pixels).Also selectable from the Mode dial is the SCN/Picture Effect mode, which features 11 new artistic styles including effects such as High-Contrast Mono, Partial Colour, High-Key and Toy Camera. These can be accessed quickly using the Function button (Fn) and there's a handy preview showing you how the result will appear when shooting in Live View mode. As well as offering the standard M, A, S, P modes, Sony's Sweep Panorama mode is on hand for super-wide images, while in playback mode you can hit the central D-Pad button to view your panoramic in a sweep view and check it for any noticeable joins. For metering, the a35 uses the tried-and-tested 1200-zone evaluative metering system, offering Multi, Centre-weighted and Spot metering modes. Accessing these and other common functions is straightforward thanks to the Fn button, but rather than adopting the tilt and swivel type screen from the a33, a fixed 3in 921k-dot resolution monitor is located at the rear. Sony claims this has helped reduce the cost of production, making it more affordable to its consumers. Comparing the price of the a35 to the a33 when it was launched, it works out £50 cheaper and falls just short of the £600 mark with the 18-55mm f/3.5-5.6 lens included. Video-wise, there's a Movie-rec button above the screen to start filming, with footage being captured in Full HD (1920 x1080 @25fps) in the AVCHD format.
Performance & HandlingEven though the a35 has a fairly small handgrip it feels comfy to hold and is smartly finished in a black, rubberised coating. Your index finger easily hovers over the shutter and on/off switch and the positioning of the other buttons is also excellent. The only two controls that aren't easily reached by the right hand are the Mode dial and Menu button, which are set to the left of the viewfinder. The menu system is very clear and neatly laid out, too. Split into six simple categories, its white text stands out well against the black background and the Help Guide is useful for newcomers who'd like a brief description of each setting and what it controls. When shooting with the a35, there were occasions when we wished it featured a pull-out, tilt-and-swivel screen as shooting at low and high angles was trickier with the fixed display. That said, the screen displays a crystal-clear picture in both Live View and Playback modes. The same can also be said for the a35's EVF which is great to use in high-contrast conditions when it's tricky to compose on the LCD. The EVF displays a pin-sharp image, also clearly revealing your shutter speed, aperture and the exposure bar in the bottom right-hand corner. Unlike some D-SLRs that feature optical image stabilisation in their lenses, the a35 uses Sony's SteadyShot stabilisation system to combat camera shake. Effective to four stops, this sensor-shift type of image stabilisation gives off a low-frequency mechanical whirr in operation and while this isn't an issue when shooting stills, the noise is picked up by the camera's inbuilt microphone when recording HD videos. Added to this is the noise the 18-55mm kit lens makes when focusing – it too produces some mechanical whirring noises, so expect to hear these in the background when you replay your movies.The 15-point Phase Detection AF system worked very well and there's Wide, Spot and Local AF area modes to choose from. Repositioning the AF point in the frame is very simple to do; just hit the centre AF button on the D-Pad and use the four-way controller to move your AF target to its new position. With its uninterrupted AF system, the a35 managed to lock on to subjects very quickly with barely any signs of hesitation or hunting – even in low-light. Setting the mode dial to SCN/Picture Effect mode, we enjoyed using the rich palette of artistic options. Partial Colour mode is great if you want to pick out red, green, blue or yellow tones from a mono image and offers a similar result to a pop-colour effect, but our two favourite creative modes were Toy Camera and High-Contrast Monochrome. Toy Camera pronounces the colours in your shots and darkens the edges of the frame to produce a creative vignette effect, whereas High-Contrast Mono darkens the shadows and brightens the highlights to give you really punchy black & white results. Loaded with an 8GB Extreme Pro SanDisk SDHC card we set about testing the a35's write speeds. A single RAW file took 3secs to write to the card whereas a Large Fine JPEG took 1.4secs. This is 0.2sec faster than the a33's write times we recorded eight months ago. Setting it to Continuous shooting (5.5fps) with image quality set to RAW, it rattled out six frames before the buffer filled up and prevented more shooting. Returning to Telezoom Continuous Priority AE mode and setting the JPEG quality to Fine we fired 18 frames at 7fps, which increased to 20 frames when we changed the JPEG quality across to Standard (RAW is unavailable in the 1.4x cropped format).
Value & VerdictIt's fair to say there isn't a huge difference between the a35 and its predecessor, the a33. If you're an a33 user there aren't really enough new features here to justify an upgrade and the a35 is more about refreshing Sony's D-SLT lineup than producing a direct replacement for its existing users to get excited about. There's no doubt that the a35 is a fantastic camera though and will certainly cause quite a stir among those who are looking to take the next step from a compact or bridge compact camera. Competitively priced at £599 with the 18-55mm kit lens, one of the a35's closest competitors on the market is Nikon's D5100 D-SLR, which features a similarly sized 16.2Mp CMOS sensor. The a35's trump card is that it can shoot 3fps faster than the D5100 (albeit a reduced resolution of 8.4Mp), and other features such as its Sweep Panorama mode and lightning-fast AF make it an attractive proposition. We thoroughly enjoyed using the a35 and, most importantly, the images and results it produces are first class. Removing the tilt and swivel screen for a fixed LCD is a regrettable decision in our opinion because it's a feature many people want and commonly use, but this has reduced the camera's price, so should help it reach a wider audience. The a35 doesn't pick up five stars across the board, but remains a cracking entry-level camera and a genuine rival to budget D-SLRs.
Digital Single Lens Translucent (D-SLT) technologyRather than using a conventional moving mirror behind the lens mount to channel light into an optical viewfinder as in a regular D-SLR, the Sony a35 'SLT' uses a fixed, semi-translucent mirror that splits the optical pathway of light between an AF sensor and the image sensor. This design offers uninterrupted AF as there's nothing to get in the way of the light, while a continuous electronic feed is taken from the sensor to display images through an EVF (or the LCD screen).
Continuous Priority AE modeThe a35 features a new Telezoom Continuous Priority AE mode for fast, high-speed shooting. It automatically multiplies your focal length by 1.4x, but allows you to shoot at an impressive 7fps. Easily located inbetween Manual and Sweep Panorama modes from the Mode dial, it's worth noting that you're restricted to shooting in JPEG (there's no RAW) and that resolution falls to 8.4Mp.
AT A GLANCEStreet price: £599 (with 18-55mm)Resolution: 16.2Mp (4912x3264 pixels)Lens Mount: Sony Alpha mountFocusing: Single-shot AF, Automatic AF, Continous AF, Manual FocusBurst rate: 5.5fps or 7fps in Telezoom Continuous Priority AE ModeWrite Speed: 1.3secs (JPEG), 2.2secs (RAW) ISO Range: 100-12,800Image stabilisation: Sensor-shiftShutter range: 30secs-1/4000secViewfinder: EVF, 1.15m dot resolutionMonitor: 3in, 921k dot TruBlack LCDLive View: Yes HD Video: Yes, Full HD 1920x1080@25fpsStorage: SD/SDHC/SDXC, Memory Stick Pro Duo/Pro-HG DuoWeight (Body only): 415gDimensions: 124.4x92x84.7mmVisit: www.sony.co.uk
Add your comment
You must be logged in to subscribe to a topic
Login or register now
There are currently no comments
Sign in You must be signed in to submit a comment.
Your comment
By submitting your comment, you agree to adhere to Photo answers
Terms and Conditions
Want to ask advice or offer your opinion? Visit our forums where you'll find helpful photographers already chatting and swapping knowledge.
Start a topic now
© Copyright 2016 Bauer Consumer Media - All rights reserved.
Terms of Use |
Privacy and Cookie Policy |
Advertise with us |
Site map |
Resources |
Complaints Policy


text:
After 72 hours, concrete under the Powerblanket heating blanket achieves about 3,900 psi. Concrete under a standard curing blanket reaches about 2,100 psi.
This year's CIM Auction at World of Concrete raised more than $925,000 towards...
Curing Blankets
PUBLIC WORKS Staff
Is this the year your team's going to plunge into pervious? Before you do, read this...
Construction Equipment
This course will take a closer look at what ground and polished concrete is, their...
Please read our Content Guidelines before posting.
Copyright ©
2016 Hanley Wood Media, Inc. All rights reserved.


text:
Grander and with more dragon-packed goodness, DreamWorks' new computer-animated spectacular, "How to Train Your Dragon 2," brings back the adventures of Hiccup and Toothless five years after we last saw them.
Slightly stubble-bearded Hiccup (still voiced by the always slightly pubescent-sounding Jay Baruchel) is now 20 and has to contend with his father's (Gerard Butler as Stoick) repeated desire to train his son in the ways of leadership for the Viking village of Berk. Although Berk has made peace with the dragons, and each villager seems to have adopted a loving "pet" dragon, Stoick wants Hiccup to focus on eventually assuming the responsibility of leadership. Yet, Hiccup is, instead, entranced by the wanderlust of finding new, distant lands on the back of his domesticated Night Fury named Toothless.
Avoiding mundane daily village tasks, Hiccup repeatedly takes to the sky aboard Toothless, charting new lands on his homemade map, until our favorite young dragon and rider are unexpectedly entangled in the nets of dragon traders, led by Eret (Kit Harington of "Game of Thrones" fame). Hiccup and Toothless escape but find out about the impending threat of Drago (Djimon Hounsou), a dragon collector who will stop at nothing to rule all dragons. In searching for Drago, Hiccup also comes across Valka (Cate Blanchett), a mysterious protector of the dragons, who once knew Hiccup many years ago. Together, Hiccup, Stoick, Valka, and all Hiccup's friends from Berk (including sometime girlfriend, Astrid, voiced by America Ferrera) seek to protect their way of life, including the freedom of their dragon friends, from the soulless, violent Drago.
"How to Train Your Dragon 2" is a darker, more emotionally touching story than its predecessor, emphasizing the difficulties faced when growing from adolescence into adulthood. Although there are moments of levity as well as visually exhilarating scenes of unbridled exploration aboard the wings of dragons, "Dragon 2's" beauty is in its clear emphasis on the importance of maturity, family bonds, and peaceful co-existence.
Emotional growth abounds throughout the film. Toothless and Hiccup have almost become one in their deep trust and unending protection of each other. And, indeed, along the way, Hiccup has to surmount grave challenges and a reluctant rise to adulthood, facing a version of the less-than-optimal circumstances that we all must confront in maturity. Even further expanding the emotional heart of the film is Hiccup's father, Stoick. The beautiful moment when Stoick sees Valka is as touching as any couple's scene since Carl and Ellie in Pixar's "Up."
Unfortunately, the film's villain, Drago, is the toothless one. Painted as evil, Drago is initially built up by reputation, but he is a let down when finally revealed. Although Drago may be a bit scary for the littles in the audience, he is, in essence, sort of a darker version of a "Scooby Doo"- caliber villain of limited influence.
"How to Train Your Dragon 2" is a worthy successor to the original, although the dramatic, emotional storyline may cause the youngest viewers to be a bit antsy. "Dragon 2" is a fine film best suited for and enjoyed by the 5+ crowd and their families. "How to Train Your Dragon 2" is rated 4 of 5 stars.
"How to Train Your Dragon 2" is rated PG for "adventure action and some mild rude humor."
When it's too hot to be outside this summer, check out all my new film reviews! Follow me for all the latest on Facebook at "San Antonio Movie Examiner" or on Twitter @christinephd. See you at the movies!


text:
A perfect blend of classic film noir and graphic novel, SIN CITY 2: A DAME TO KILL FOR is deliciously decadent. The sequel to the 2005 "Sin City" by Robert Rodriguez and graphic novelist Frank Miller, the pair reunite nine years later for this action-packed explosion of visceral raw lust, corruption, vengeance and violence that dazzles, delights, intrigues, and celebrates the noir thrillers of the 30's, 40's and 50's on screen and on the pulp page.
Once again based in Kadie's Club Pecos in the heart of Sin City, Rodriguez and Miller play with the "Sin City" timeline and weave together multiple vignettes with the connective tissue being killer-for-hire Marv, who finds himself in all number of seductively dangerous situations, while tying everyone and everything together for a cohesive textured story that leaps off the screen (literally and figuratively as the best way to see SIN CITY 2 is in 3D). With chapters consisting of "Nancy's Last Dance", "Just Another Saturday Night", the centrally themed "A Dame To Kill For" and new to the SIN CITY world and written just for the film, "The Long, Bad Night", albeit a tad convoluted at times with the revolving door of characters and meld of prequel and sequel themes, the intrigue and mystery is thick as thieves in the night while powerful visual imagery entices and seduces with every frame.
We meet up again with Nancy Callahan who is still deep in mourning for the love of her life, Detective John Hartigan. A gal with a plan, or so she thinks, she's out to get the man who killed Hartigan - Senator Roark. But will she succumb to self-destructive grief, guilt and drunkenness first? Dwight McCarthy is back battling his own demons and backstory while trying to move forward and move on, distancing himself from the sultry and dangerous femme fatale, Ava Lord. Like Nancy, will Dwight fall victim to his own weakness when it comes to Ava? And then there's Johnny. With a youthful look and over-compensating cockiness, Johnny never loses; or so he thinks, until he goes toe-to-toe with the all powerful Roark. Dotting the lush black and white landscape are other characters, like Manute, Ava's bodyguard; a gal named Goldie who catches Johnny's eye; hooker-come-lately Sally and her john Joey; hard-ass and oh-so-sexy Gail; detectives Mort and Bob, one of whom falls prey to Ava's charms; and a back-alley doc named Kroenig who uses popsicle sticks as medical tools.
Casting is impeccable with many returning actors from "Sin City", including Powers Boothe as Roark. A much expanded role this go-round, Boothe commands the screen. From voice to physical presence, he is a force to be reckoned with on all counts. Jessica Alba returns as Nancy as does Rosario Dawson who is more kick-ass than ever as Gail while showing a previously unseen tenderness and soft spot when it comes to Dwight. A side perk: every Dominatrix in town will be looking for Gail's garb for their own personal wardrobe. Although killed off in the first film, as we all know, there's always a way to bring characters back from the dead and Miller and Rodriguez waste no time in returning Marv, Hartigan and Goldie, again played by Mickey Rourke, Bruce Willis and Jaime King, respectively. Josh Brolin captivates as Dwight while Juno Temple delights as Sally. Not to be overlooked are Christopher Meloni and Jeremy Piven who, together with Ray Liotta's strong comic notes as Sally's wimp of a john, add strong notes of dark humor as bumbling genre exaggerated gumshoes Mort and Bob.
But the real "stars" here are Joseph Gordon-Levitt and Eva Green as Johnny and Ava. A completely new character to the SIN CITY world is Gordon-Levitt's Johnny. Working together with Rodriguez and Miller to create the character and the storyline, the trio collaborated to magnificent result. And talk about a perfect performance! Gordon-Levitt was made for film noir. He has the look, the persona, the cool, slickness. He could step into any noir film from Gordon Wills or Richard Wallis and be welcomed with open arms by TCM fans everywhere. Likewise, Eva Green. The classic noir femme fatale, Green is silken with a languid sultry seductiveness that has you wondering where the dream ends and nightmare begins with Ava Lord. The subject of some of the film's true "money shots", the play of extreme light and dark contrast is used to its best suggestive advantage with the flawless Green. And when it comes to dialogue delivery, Green oozes sex with every syllable.
Ultra-violent and action-filled, Rodriguez and Miller go all out this go-round pushing the envelope far beyond what we saw in "Sin City". Capturing the defining essence of hallmark noir - tragic romance, betrayal, darkness, guilt and a femme fatale to die and kill for - SIN CITY 2 is the perfect economy of expression with graphic impact. Rodriguez and Miller truly embrace the noir ideal of a black slate on which we write our ills and then erase them clean, creating a fully self-contained hyper-stylized reflection of cultural predilections.
To create the visual look and overall tonal bandwidth, Rodriguez "went ahead and pushed it further towards the book, especially with the more abstract drawings and [Miller's] graphic approach to it. It's just eye-popping. . .We did it in 3D because I just thought that would lend so much better to a graphic novel because of the absence of information." With pops of the distinctive Max Factor signature 1940's red against the stark intense contrast of saturated black blacks and white, more often than not Rodriguez opts for a liquified almost neon white for blood-letting, grappling with sexual metaphor in the process.
Key to the look and feel of SIN CITY 2: A DAME TO KILL FOR, and quite honestly, the juiciest aspect of the film as a whole, is the cinematography and particularly, the lighting which is dynamic and dramatic, celebrating metaphor of good and evil, dark and light, in virtually every shot. Facial half-light is particularly effective and starkly lush. According to Rodriguez, who does his own cinematography and does so with efficiency thanks to a green screen set, "The lighting takes time. When we're on the set, fortunately, we can move pretty quickly because I'm lighting just the actors. . . You light them with the set in mind, which is where the graphic novels are so great. You already know where your key is going to be and where there might be a back light. And I know how to manipulate the images quite a bit. If I shoot a certain way, I can add a lot of shadows later. . .[I]t gives you a lot of freedom later, to play with all the lighting and get it right." The visual and emotional result is both salacious and stunning.
SIN CITY 2: A DAME TO KILL FOR is a killer.
Directed by Robert Rodriguez and Frank Miller
Written by Frank Miller based on graphic novels by Frank Miller
Cast: Mickey Rourke, Jessica Alba, Josh Brolin, Bruce Willis, Joseph Gordon-Levitt, Eva Green, Powers Boothe, Rosario Dawson, Ray Liotta, Christopher Meloni, Jeremy Piven, Dennis Haysbert, Stacy Keach, Juno Temple, Christopher Lloyd, Jaime King
SIN CITY 2: A DAME TO KILL FOR leaps onto the big screen on August 22, 2014


text:
An Academy for the Advancement of Science and Technology (AAST) student should have a strong interest in mathematics, science and technology. The program of study is centered on the usual academic core subjects - English, social studies, world language, and mathematics. In addition, AAST students take three years of biology, chemistry and physics. This means that an AAST student takes two and often three science courses simultaneously. This unusual sequence leads to an understanding and retention far greater than that obtained in a more traditional program
Of course this concentration enables students to graduate with a strong background in scientific concepts. However, AAST students are also equipped with a strong, practical education as well. Weekly laboratory sessions are held for freshmen and sophomores. Additional laboratory work is performed in core classes and electives such as organic chemistry or biotechnology.
Most AAST students pursue careers, for which they are well prepared, in science, engineering or medicine. However, law is surprisingly common. Sometimes AAST students with a strong interest in mathematics choose careers in mathematical modeling in the financial industry, while others may become poets or philosophers. Anything is possible! Applying to AAST requires an interest in science, not a pledge to devote one's life to it.