Author: Tom
Download file using AFNetwork
set your Rakefile
app.pods do pod 'AFNetworking' ... end
def downloadFile(url, file, filesize) url = NSURL.URLWithString(url) request = NSURLRequest.requestWithURL(url) operation = AFHTTPRequestOperation.alloc.initWithRequest(request) operation.outputStream = NSOutputStream.outputStreamToFileAtPath(file, append: false) unless filesize.nil? SVProgressHUD.showProgress(0, status: "Downloading file") operation.setDownloadProgressBlock(lambda{|bytesRead, totalBytesRead, totalBytesExpected| SVProgressHUD.showProgress((((totalBytesRead/filesize.to_f)*100.0).round)/100.0, status: "Downloading file") }) end operation.setCompletionBlockWithSuccess(lambda{|request, response| SVProgressHUD.dismiss unless filesize.nil? }, failure: lambda{|request, err| SVProgressHUD.dismiss unless filesize.nil? @alert = UIAlertView.alloc.initWithTitle('Error', message: 'Error when downloading data.', delegate: nil, cancelButtonTitle: 'OK', otherButtonTitles: nil) @alert.show }) operation.start end
when downloading multiple files, use NSOperationQueue
# change donwloadFile def downloadFile.. ... operation # was operation.start end
@queue = NSOperationQueue.alloc.init @queue.name = "FileDownload" @queue.maxConcurrentOperationCount = 1 # number of concurrent downloads @queue.addOperation(downloadFile(url, file, filesize))
Makronky – “italská meringue”
Po několika neúspěšných pokusech, prolézání netu skrz naskrz jsem objevil recept a metody – a hlavně odpovědi na otázky, které si klade snad každý makronkovač.
“Proč?”
A odpověď byla
“Protože vše bylo špatně!”
Ale začneme od začátku. Recept a postup je jednoduchý, ale každá chyba a zdánlivá maličkost se nám vrátí v podobě popraskaných makronek, prázdných schránek nebo placatých mandlových sušenek.
Připravme si:
- teploměr na rozvar, kdo nemá a neumí to očkem, nemusí dále číst
- 200g mandlové mouky
- 200g cukru moučky (bohužel jsem u nás neobjevil tu bez škrobu)
- 200g cukru krystal
- 50ml vody
- 150g bílků (cca 5 vajec)
- barvivo – ideálně gelové
K jednotlivým surovinám. Mandlovou moučku jsem po několika pokusech ji prosévat použil celou. Neprosetou. Bílky – důležité je vejce nechat odležet, vyklepout bílek a nechat ohřát na pokojovou teplotu, tzn. aspoň hodinu – ideálně den, dva. Dále je třeba, aby v bílcích nebyla byť sebemenší stopa čehokoli jiného.
A teď k tomu zajímavějšímu. Budu to psát v bodech, ať se každý může orientovat podle sebe.
- Do kastrůlku dáme krystal a vodu. Používám nerez se silným dnem. Dáme vařit na mírný plamen. Zamícháme pouze jednou nebo dvakrát, pak není třeba.
- Smícháme cukr moučku a mandlovou mouku. Mixerem mísíme aspoň dvě minuty.
- 1/2 bílků oddělíme a dáme na stranu
- Druhou polovinu dáme do mísy a vyšleháme sníh. A teď to důležité. Šleháme na vysokou rychlost, žádný cmrndání a šudlání. Zároveň druhým okem hlídáme rozvar. Jeho teplota nesmí překročit 118oC – po dosažení vypnout
- Předpokládám, že jste dočetli až sem a tudíž v druhé ruce máte kastrolek s rozvarem
- Snižte mixer na pomalý chod a vlévejte rozvar do sněhu. Někdo to leje po misce, já lil přímo do sněhu – ale ne do vrtulek. Lít se musí pomalu, tenkým “čurkem”, ideálně na několik kroků.
- Po vlití rozvaru mixer naplno a mixujeme, mixujeme, mixujeme, dokud směs nebude krásně lesklá a pevná. Aspoň 3-5 minut. Musí také zchladnout.
- Smícháme první polovinu bílků s mandlovou moučkou a cukrem a mícháme. Mícháme tak dlouho, dokud z toho není těsto.
- Do směsi postupně vmícháme bílky s cukrem. POSTUPNĚ! Třeba načtyřikrát. A teď další důležitá věc. Pokud nechcete mít skořápky bez obsahu, míchejte proti stěně mísy, razantně, ale s citem. Není cílem sníh zase překonvertovat na bílek, ale dostat pryč vzduch a “zhutnit” hmotu.
- Pak je možné směs rozdělit, obarvit a hurá na plech.
- Není nezbytně nutné s plechem mlátit o zem – toť každého volba
Pečení by mělo následovat. Nicméně. Je třeba nechat makronky zaschnout. A pozor. Je špatné málo i hodně. Začít můžete od 15minut a skončit někde u hodiny. Záleží to na bílcích a surovinách, jak měly hodně v sobě vody. Každopádně, jakmile přestává povrch lepit, šup s tím do trouby. Pečeme na 160oC asi 15minut, uprostřed trouby. Pokud na pečícím papíru, stačí 12minut.
Voila! Plnění nechám na každém z vás, já plním ganáží. Pokud se povedly, napište to prosím do komentářů.
Chyby:
- popraskané makronky – přesušení nebo špatná směs – málo bílků
- duté makronky – moc vzduchu, chyba při mísení s mandlovou směsí
- placaté – špatný sníh z bílků
PS: Francouzská/italská. Rozdíl? Francouzská je lehčí, sníh se smíchá rovnou s cukrem, takže se eliminuje spoustu chyb s rozvarem, ale chuťově, dámy a pánové, chuťově je to jinde :-)
MD5/SHA1 gem for RubyMotion
I’ve released gem for making MD5/SHA1 hashes in RubyMotion. It’s handled by small ObjC code in vendor directory. You can get this gem from my github.
Add gem ‘rm-digest’ into your Gemfile , run bundle install and you can generate MD5/SHA1 in your application.
digestSHA1String = RmDigest::SHA1.hexdigest('some string') digestMD5String = RmDigest::MD5.hexdigest('some string')
Dismissing popup view tapping outside
class MyView < UIVIewController ... # set gesture to close def viewDidAppear(animated) recognizer = UITapGestureRecognizer.alloc.initWithTarget(self, action: 'handleTapBehind:') recognizer.setNumberOfTapsRequired(1) recognizer.cancelsTouchesInView = false self.view.window.addGestureRecognizer(recognizer) end # handle tap def handleTapBehind(sender) if sender.state == UIGestureRecognizerStateEnded location = sender.locationInView(nil) unless self.view.pointInside(self.view.convertPoint(location, fromView: self.view.window), withEvent: nil) self.view.window.removeGestureRecognizer(sender) self.dismissViewControllerAnimated(true, completion: lambda{}) end end end end
PSTCollectionView in rubymotion
I need use UICollectionView, but target my app for iOS < 6.0. So I’ve found PSTCollectionView library and using it with my rubymotion project. You can find whole source code in my github repo.
You need to download and link PSTCollectionView directory into vendor/PSTCollectionView .
Then update yourRakefile :
app.vendor_project('vendor/PSTCollectionView', :static) app.frameworks += %w(QuartzCore UIKit) app.deployment_target = "5.0" app.device_family = [:ipad]
create app/controllers and add two files – cell.rb and view_controller.rb
cell.rb
class Cell < PSTCollectionViewCell #PSUICollectionViewCell attr_accessor :label def initWithFrame(frame) if super @label = UILabel.alloc.initWithFrame(CGRectMake(0.0, 0.0, frame.size.width, frame.size.height)) @label.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth @label.textAlignment = UITextAlignmentCenter @label.font = UIFont.boldSystemFontOfSize(50.0) @label.backgroundColor = UIColor.underPageBackgroundColor @label.textColor = UIColor.whiteColor self.contentView.addSubview(@label) end self end end
and view_controller.rb
class ViewController < PSTCollectionViewController #PSUICollectionViewController def viewDidLoad super pinchRecognizer = UIPinchGestureRecognizer.alloc.initWithTarget(self, action:'handlePinchGesture') self.collectionView.addGestureRecognizer(pinchRecognizer) self.collectionView.registerClass(Cell, forCellWithReuseIdentifier: "MY_CELL") end def collectionView(view, numberOfItemsInSection: section) 63 end def collectionView(collectionView, cellForItemAtIndexPath: indexPath) cell = collectionView.dequeueReusableCellWithReuseIdentifier("MY_CELL", forIndexPath:indexPath) cell.label.text = 'test' cell end def collectionView(collectionView, layout: collectionViewLayout, sizeForItemAtIndexPath:indexPath) CGSizeMake(120, 120) end def collectionView(collectionView, layout: collectionViewLayout, minimumInteritemSpacingForSectionAtIndex: section) 30 end def collectionView(collectionView, layout:collectionViewLayout, minimumLineSpacingForSectionAtIndex: section) 30 end end
Finally, change app_delegate.rb
class AppDelegate def application(application, didFinishLaunchingWithOptions:launchOptions) @window = UIWindow.alloc.initWithFrame UIScreen.mainScreen.bounds view_controller = ViewController.alloc.initWithCollectionViewLayout(PSTCollectionViewFlowLayout.new) @window.rootViewController = view_controller @window.makeKeyAndVisible true end end
runrake and voila! :)
PSPDFKit gem for rubymotion
I’ve just released simple gem to include PSPDFKit into rubymotion project – see https://rubygems.org/gems/pspdfkit.
Installation is pretty straightforward
add to your Rakefile :
require 'rubygems' require 'bundler' Bundler.require
Create Gemfile file and add:
source :rubygems gem 'pspdfkit'
and execute bundle install .
Then you need to copy/link framework and bundle files:
mkdir vendor cd vendor ln -s ../../pdf/Products/PSPDFKit.embeddedframework/PSPDFKit.framework ./ cd ../resources ln -s ../../pdf/Products/PSPDFKit.embeddedframework/Resources/PSPDFKit.bundle ./
That’s it. Run rake and test your installation.
PSPDFKit in rubymotion
Update
If you’re using Bundler, you can simply add gem ‘pspdfkit’ to your Gemfile. See more on https://github.com/tmeinlschmidt/rm-pspdfkit
As I’ve started using this famous framework, I’d like to use it in my rubymotion application. So, there’s my setup to include this fmw in rubymotion project
- extract PSPDFKit anywhere
- create directory vendor in your RM project
- create symbolic link from your unzipped PSPDFKit to vendor/PSPDFKit.framework
cd vendor ln -s ../../pdf/Products/PSPDFKit.embeddedframework/PSPDFKit.framework ./ cd ../resources ln -s ../../pdf/Products/PSPDFKit.embeddedframework/Resources/PSPDFKit.bundle ./
and modify Rakefile accordingly
app.vendor_project('vendor/PSPDFKit.framework', :static, products: ['PSPDFKit'], headers_dir: 'Headers') app.libs << '/usr/lib/libz.1.1.3.dylib' app.frameworks += %w(MessageUI AssetsLibrary MediaPlayer PSPDFKit)
try rake , it should link and start simulator.
Next step
Add some PDF file into your app resources folder.
And then you can try to modify app/app_delegate.rb with simple example:
class AppDelegate def application(application, didFinishLaunchingWithOptions:launchOptions) documentURL = NSBundle.mainBundle.resourceURL.URLByAppendingPathComponent "DevelopersGuide.pdf" @document = PSPDFDocument.PDFDocumentWithURL documentURL pdfController = PSPDFViewController.alloc.initWithDocument @document navController = UINavigationController.alloc.initWithRootViewController pdfController @window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds) @window.makeKeyAndVisible @window.rootViewController = navController end end
Chléb pšeničný, nehnětený
Můj první chlebový pokus. Bohužel zatím bez kvásku, ale i tak myslím, že docela dobrý výsledek.
- 3hrnky hladké mouky, mouku jsem přesil
- 1 1/2 hrnku vlažné vody
- 1/2 lžičky sušeného droždí (dal jsem droždí, asi tak ždibec, 3x3x3mm)
- 1 1/2 lžičky soli
- kmín
Mouku, droždí, sůl a koření jsem promíchal v míse. Přidal vodu a zahnětl. Přikryl folií, utěrkou a dal k topení. Celou směs jsem nechal cca 14hodin odpočinout a kynout. Poté jsem těsto vyklepl na pomoučněný plac, nechal chvíli rozležet, párkrát přeložil a přehodil do misky, kde jsem si připravil pomoučněnou utěrku s kmínem. Mezitím vyhřál troubu na 200oC – je důležité tam nechat rozpálit i hrnec a poklici.
Pekl jsem cca 30minut s poklicí, pak 30minut bez. Vychladnutí na kovové mřížce, aby se nezapařil zespoda.
Banánové muffiny
- 2 zralé banány
- 1 vejce
- 120g cukru krupice (nebo třtinového cukru) (1/2 hrnečku)
- 150g hladké mouky (1 1/2 hrnečku)
- 80ml oleje (1/3 hrnečku)
- 1 prášek do pečiva (dal jsem asi 1/4 sáčku)
Banány rozmačkáme vidličkou nebo rozmixujeme. Do mísy banány na kolečka, cukr, vejce a olej. Mixerem spojíme. Přidáme mouku. Je-li těsto příliš hutné, přilejeme opatrně mléko. Těsto nesmí být úplně tekuté. Jako poslední vmícháme prášek do pečiva. Pečeme na 160 °C, v předehřáté troubě, asi půl hodinky.