Display thumbnails for pdf files in IOS

Create Thumbnail from pdf file

- (UIImage *)imageFromPDFWithDocumentRef:(CGPDFDocumentRef)documentRef {
    CGPDFPageRef pageRef = CGPDFDocumentGetPage(documentRef, 1);
    CGRect pageRect = CGPDFPageGetBoxRect(pageRef, kCGPDFCropBox);

    UIGraphicsBeginImageContext(pageRect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(context, CGRectGetMinX(pageRect),CGRectGetMaxY(pageRect));
    CGContextScaleCTM(context, 1, -1);  
    CGContextTranslateCTM(context, -(pageRect.origin.x), -(pageRect.origin.y));
    CGContextDrawPDFPage(context, pageRef);

    UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return finalImage;
}

// Resize Thumbnail
- (UIImage *)image:(UIImage*)originalImage scaledToSize:(CGSize)size
{
    //avoid redundant drawing
    if (CGSizeEqualToSize(originalImage.size, size))
    {
        return originalImage;
    }
    
    //create drawing context
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f);
    
    //draw
    [originalImage drawInRect:CGRectMake(0.0f, 0.0f, size.width, size.height)];
    
    //capture resultant image
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    //return image
    return image;
}

 

How to Use

NSString *pdfpath = [documentsDirectory stringByAppendingPathComponent:[filePathsArray objectAtIndex:indexPath.row]];
NSURL* pdfFileUrl = [NSURL fileURLWithPath:pdfpath];
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfFileUrl);
UIImage *pdfthumb = [self imageFromPDFWithDocumentRef:pdf];

cell.imageView.image = [self image:pdfthumb scaledToSize:CGSizeMake(40, 40)];

ตามนี้เลย

แนวทางแก้ปัญหา libc++abi.dylib: terminating with uncaught exception of type NSException

Screen Shot 2557-09-27 at 6.08.26 PM

 

หลายครั้งเมื่อเราต้องเจอกับ error : libc++abi.dylib: terminating with uncaught exception of type NSException

ในขั้นแรกที่เจอกับปัญหานี้อย่าเพิ่งตกใจให้ดูก่อนว่าปัญหาเกิดจากอะไรจากนั้นให้ เลื่อน Debug Area ขึ้นไป เราจะเห็น คำอธิบายว่า Error เกิดจากอะไร

 

Screen Shot 2557-09-27 at 6.15.46 PM

 

ให้หาทางแก้ตามนั้น….จบ

ค่านิยม 5 ประการ ของวิถีบริษัทแฮกเกอร์แห่งหนึ่ง

1. เน้นที่ผลกระทบ – “หากต้องการสร้างผลกระทบที่ยิ่งใหญ่ที่สุด วิธีดีที่สุด คือ ต้องมั่นใจว่า เรามุ่งเน้นที่การแก้ไขปัญหาสำคัญที่สุดเสมอ ฟังดูง่าย แต่เราคิดว่า บริษัทส่วนใหญ่ยังทำได้ไม่ดีนักในเรื่องนี้และเสียเวลาไปมากมาย เราจึงหวังว่า ทุกคนในบริษัทจะเก่งกาจในการค้นหาปัญหาสำคัญที่สุด มาคิดหาวิธีแก้ไข”

2.เคลื่อนตัวรวดเร็ว – “การเคลื่อนตัวรวดเร็วทำให้เราสร้างสิ่งต่างๆ ได้มากขึ้นและเรียนรู้เร็วขึ้น ขณะที่บริษัทส่วนใหญ่เติบโต พวกเขาก็มักเชื่องช้าลงมากเกินไป เพราะกลัวจะทำผิดพลาด แทนที่จะกลัวการเสียโอกาสจากการเคลื่อนตัวช้าเกินไป เราจึงมีคำพูดว่า “เคลื่อนตัวให้เร็วและทำข้าวของพัง” เพราะถ้าไม่ได้ทำอะไรพังไปบ้างเลย แสดงว่า เรายังเคลื่อนตัวไม่เร็วพอ”

3. กล้าหาญ – “การสร้างสิ่งที่ยิ่งใหญ่หมายถึงการเสี่ยง ซึ่งอาจน่ากลัว และทำให้บริษัทส่วนใหญ่ไม่กล้าทำเรื่องที่ควรทำ อต่ในโลกที่เปลี่ยนแปลงอย่างรวดเร็ว ผมแน่ใจว่า เราจะล้มเหลว หากไม่ยอมเสี่ยงอะไรเลย เราจึงมีคำพูดที่ว่า “สิ่งที่เสี่ยงที่สุดคือ การไม่เสี่ยงอะไรเลย” เราจึงกระตุ้นให้ทุกคนตัดสินใจิย่างกล้าหาญ แม้อาจผิดพลาดบ้างในบางครั้ง”

4. เปิดกว้าง – “เราเชื่อว่า โลกที่เปิดกว้างขึ้นเป็ยโลกที่ดีขึ้น เพราะผู้คนที่มีข้อมูลมากขึ้นจะตัดสินใจได้ดีขึ้น และสร้างผลกระทบที่ยิ่งใหญ่ขึ้น เช่นเดียวกับการบริหารบริษัท เราทำงานหนักเพื่อให้มั่นใจว่า ทุกคนที่บริษัทจะเข้าถึงข้อมูลทุกส่วนของบริษัทได้มากที่สุดเท่าที่จะเป็นไปได้ เพื่อจะได้ตัดสินใจดีที่สุด และสร้างผลกระทบที่ยิ่งใหญ่ที่สุด”

5. สร้างคุณค่าทางสังคม – “ขอย้ำอีกครั้ง บริษัทเราดำรงอยู่เพื่อให้โลกเปิดกว้างและเชื่อมต่อกันมากขึ้น ไม่ใช้แค่สร้างบริษัทเท่านั้น เราคาดหวังว่า ทุกวัน ทุกคนที่บริษัทจะให้ความสำคัญกับวิธีสร้างคุณค่าที่แท้จริงสำหรับโลกในทุกสิ่งที่พวกเขาทำ”

– มาร์ก ซักเกอร์เบิร์ก –
ผู้ก่อตั้งเฟซบุ๊ก

IOS App implement iTunes built-in App “File Sharing” feature

Screen Shot 2557-09-28 at 1.34.20 AM

In the new Xcode, you can do this in the UI:

1. Select your project in top left
2. Select target in next column
3. Click on Info tab
4. In Custom iOS Target Properties, hover mouse over any row and click +
5. In popup, select “Application supports iTunes file sharing”, then set Value to YES on right
6. Click Validate Settings at bottom to make sure all is good

reference: http://stackoverflow.com/questions/3241107/how-to-implement-itunes-built-in-app-file-sharing-feature#_=_

C# Move 3D object ใน Space Shooter Game

Serializable เป็น code ที่เป็นตัวบอกให้แสดงค่าตัวแปรที่เป็น public ใน code component ในกรณีที่ มีอีก object ใน file เดียวกัน
หรือง่ายๆ คือการ embed class ด้วย sub properties เข้่าไปใน object เดียวกัน

[System.Serializable]

ส่วนสำคัญของการเครื่องที่จะอยู่ที่ rigidbody.velocity รับค่า Vector3 จากคีย์บอร์ด
โดยตัวแปร speed จะเป็นตัวปรับความเร็วในการเคลี่ยนที่

float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
rigidbody.velocity = movement * speed;

ตีกรอบให้วัตถุไม่เคลื่อนที่ออกไปนอกกรอบที่กำหนด คำสั่งที่สำคัญคือ Mathf.Clamp คำสั่งนี้จะเป็นการกำหนดค่าให้อยู่ระหว่างค่าที่กำหนด

rigidbody.position = new Vector3(Mathf.Clamp(rigidbody.position.x, boundary.xMin, boundary.xMax),0.0f, Mathf.Clamp(rigidbody.position.z, boundary.zMin, boundary.zMax));

เป็นคำสั่งที่ทำให้การเคลื่อนที่ดูสมจริงมากขึ้น ในกรณีที่เป็นยานอวกาศนะ เมื่อเคลื่อนที่ไปทางซ้ายจะเบนวัตถุไปทางซ้ายและมรกรณีเดียวกันกับทางขวา
โดยค่า tilt เอาไว้กำหนดกว่าจะให้เอียงมากหรือน้อย

rigidbody.rotation = Quaternion.Euler(0.0f, 0.0f, rigidbody.velocity.x * -tilt);

ภาพรวมนะจ๊ะ

using UnityEngine;
using System.Collections;

[System.Serializable]
public class Boundary
{
public float xMin, xMax, zMin, zMax;
}

public class PlayerController : MonoBehaviour
{

public float speed;
public float tilt;
public Boundary boundary;

public GameObject shot;
public Transform shotSpawn;

public float fireRate = 0.5F;
private float nextFire = 0.0F;

void Update()
{
if (Input.GetButton("Fire1") && Time.time > nextFire) {
nextFire = Time.time + fireRate;
//GameObject clone =
Instantiate(shot, shotSpawn.position, shotSpawn.rotation); // as GameObject;
} // กดแล้วยิง
}

void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal"); //รับค่าจาก ปุ่มบน-ล่าง
float moveVertical = Input.GetAxis("Vertical"); //รับค่าจาก ปุ่มซ้าย-ขวา

Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
rigidbody.velocity = movement * speed; //เคลื่อนที่วัตถุ

rigidbody.position = new Vector3(
Mathf.Clamp(rigidbody.position.x, boundary.xMin, boundary.xMax),
0.0f,
Mathf.Clamp(rigidbody.position.z, boundary.zMin, boundary.zMax)
); //ตีกรอบให้วัตถุไม่เคลื่อนที่ออกไปนอกกรอบที่กำหนด

rigidbody.rotation = Quaternion.Euler(0.0f, 0.0f, rigidbody.velocity.x * -tilt);
}

}

Android Studio Run Device on Smart Phone and Tablets

ก่อนที่จะทดสอบให้เลือก Run -> Edit Configurations
เลือก Project ที่ต้องการ และเลือก Target Device เป็น USB device
จากนั้นให้เลือก Run หรือคลิกที่ไอคอน Run

ถ้าไม่มีอะไรผิดพลาด App ของเราก็จะไปปรากฏอยู่บน Smart Phone หรือ Tablets ที่เราได้ทำการต่อผ่าน USB ไว้

ที่มา: http://www.thaicreate.com/mobile/android-studio-run-debug-device-smart-phone-tablets.html

Resize Image Class With PHP

i found this class at http://www.paulund.co.uk/resize-image-class-php

setImage( $filename );
} else {
throw new Exception('Image ' . $filename . ' can not be found, try another image.');
}
}

/**
* Set the image variable by using image create
*
* @param string $filename - The image filename
*/
private function setImage( $filename )
{
$size = getimagesize($filename);
$this->ext = $size['mime'];

switch($this->ext)
{
// Image is a JPG
case 'image/jpg':
case 'image/jpeg':
// create a jpeg extension
$this->image = imagecreatefromjpeg($filename);
break;

// Image is a GIF
case 'image/gif':
$this->image = @imagecreatefromgif($filename);
break;

// Image is a PNG
case 'image/png':
$this->image = @imagecreatefrompng($filename);
break;

// Mime type not found
default:
throw new Exception("File is not an image, please use another file type.", 1);
}

$this->origWidth = imagesx($this->image);
$this->origHeight = imagesy($this->image);
}

/**
* Save the image as the image type the original image was
*
* @param String[type] $savePath - The path to store the new image
* @param string $imageQuality - The qulaity level of image to create
*
* @return Saves the image
*/
public function saveImage($savePath, $imageQuality="100", $download = false)
{
switch($this->ext)
{
case 'image/jpg':
case 'image/jpeg':
// Check PHP supports this file type
if (imagetypes() & IMG_JPG) {
imagejpeg($this->newImage, $savePath, $imageQuality);
}
break;

case 'image/gif':
// Check PHP supports this file type
if (imagetypes() & IMG_GIF) {
imagegif($this->newImage, $savePath);
}
break;

case 'image/png':
$invertScaleQuality = 9 - round(($imageQuality/100) * 9);

// Check PHP supports this file type
if (imagetypes() & IMG_PNG) {
imagepng($this->newImage, $savePath, $invertScaleQuality);
}
break;
}

if($download)
{
header('Content-Description: File Transfer');
header("Content-type: application/octet-stream");
header("Content-disposition: attachment; filename= ".$savePath."");
readfile($savePath);
}

imagedestroy($this->newImage);
}

/**
* Resize the image to these set dimensions
*
* @param int $width - Max width of the image
* @param int $height - Max height of the image
* @param string $resizeOption - Scale option for the image
*
* @return Save new image
*/
public function resizeTo( $width, $height, $resizeOption = 'default' )
{
switch(strtolower($resizeOption))
{
case 'exact':
$this->resizeWidth = $width;
$this->resizeHeight = $height;
break;

case 'maxwidth':
$this->resizeWidth = $width;
$this->resizeHeight = $this->resizeHeightByWidth($width);
break;

case 'maxheight':
$this->resizeWidth = $this->resizeWidthByHeight($height);
$this->resizeHeight = $height;
break;

default:
if($this->origWidth > $width || $this->origHeight > $height)
{
if ( $this->origWidth > $this->origHeight ) {
$this->resizeHeight = $this->resizeHeightByWidth($width);
$this->resizeWidth = $width;
} else if( $this->origWidth < $this->origHeight ) {
$this->resizeWidth = $this->resizeWidthByHeight($height);
$this->resizeHeight = $height;
}
} else {
$this->resizeWidth = $width;
$this->resizeHeight = $height;
}
break;
}

$this->newImage = imagecreatetruecolor($this->resizeWidth, $this->resizeHeight);
imagecopyresampled($this->newImage, $this->image, 0, 0, 0, 0, $this->resizeWidth, $this->resizeHeight, $this->origWidth, $this->origHeight);
}

/**
* Get the resized height from the width keeping the aspect ratio
*
* @param int $width - Max image width
*
* @return Height keeping aspect ratio
*/
private function resizeHeightByWidth($width)
{
return floor(($this->origHeight/$this->origWidth)*$width);
}

/**
* Get the resized width from the height keeping the aspect ratio
*
* @param int $height - Max image height
*
* @return Width keeping aspect ratio
*/
private function resizeWidthByHeight($height)
{
return floor(($this->origWidth/$this->origHeight)*$height);
}
}
?>

 

Using The Resize Image PHP Class

Because we have created this to allow you to resize the image in multiple ways it means that there are different ways of using the class.

Resize the image to an exact size.
Resize the image to a max width size keeping aspect ratio of the image.
Resize the image to a max height size keeping aspect ratio of the image.
Resize the image to a given width and height and allow the code to work out which way of resizing is best keeping the aspect ratio.
You can save the created resize image on the server.
You can download the created resize image on the server.
Resize Exact Size
To resize an image to an exact size you can use the following code. First pass in the image we want to resize in the class constructor, then define the width and height with the scale option of exact. The class will now have the create dimensions to create the new image, now call the function saveImage() and pass in the new file location to the new image.

$resize = new ResizeImage('images/Be-Original.jpg');
$resize->resizeTo(100, 100, 'exact');
$resize->saveImage('images/be-original-exact.jpg');

Resize Max Width Size

If you choose to set the image to be an exact size then when the image is resized it could lose it’s aspect ratio, which means the image could look stretched. But if you know the max width that you want the image to be you can resize the image to a max width, this will keep the aspect ratio of the image.

$resize = new ResizeImage('images/Be-Original.jpg');
$resize->resizeTo(100, 100, 'maxWidth');
$resize->saveImage('images/be-original-maxWidth.jpg');

Resize Max Height Size
Just as you can select a max width for the image while keeping aspect ratio you can also select a max height while keeping aspect ratio.

$resize = new ResizeImage('images/Be-Original.jpg');
$resize->resizeTo(100, 100, 'maxHeight');
$resize->saveImage('images/be-original-maxHeight.jpg');

Resize Auto Size From Given Width And Height
You can also allow the code to work out the best way to resize the image, so if the image height is larger than the width then it will resize the image by using the height and keeping aspect ratio. If the image width is larger than the height then the image will be resized using the width and keeping the aspect ratio.

$resize = new ResizeImage('images/Be-Original.jpg');
$resize->resizeTo(100, 100);
$resize->saveImage('images/be-original-default.jpg');

Download The Resized Image

The default behaviour for this class is to save the image on the server, but you can easily change this to download by passing in a true parameter to the saveImage method.

$resize = new ResizeImage('images/Be-Original.jpg');
$resize->resizeTo(100, 100, 'exact');
$resize->saveImage('images/be-original-exact.jpg', "100", true);

Ionic framework Start Command

* cd into your project: $ cd myApp

* Setup this project to use Sass: ionic setup sass

* Develop in the browser with live reload: ionic serve

* Add a platform (ios or Android): ionic platform add ios [android]
Note: iOS development requires OS X currently
See the Android Platform Guide for full Android installation instructions:
https://cordova.apache.org/docs/en/edge/guide_platforms_android_index.md.html

* Build your app: ionic build <PLATFORM>

* Simulate your app: ionic emulate <PLATFORM>

* Run your app on a device: ionic run <PLATFORM>

* Package an app using Ionic package service: ionic package <MODE> <PLATFORM>

For more help use ionic –help or visit the Ionic docs: http://ionicframework.com/docs

*Test with Browser: ionic serve

*Emulator: https://chrome.google.com/webstore/detail/ripple-emulator-beta/geelfhphabnejjhdalkjhgipohgpdnoc