วันศุกร์ที่ 18 พฤศจิกายน พ.ศ. 2559

ทดสอบ printf และ scanf

#include <iostream>
#include <string.h>

char * s1(char* b);

int main()
{
    setbuf(stdout, NULL);
    char *s, *b;
    s = (char *) malloc(15);
    b = (char *) malloc(15);
    strcpy(s, "test");
    strcpy(b, "xxx");
 
    s = s1(b);
 
    printf("input:");
    scanf("%15s",s);
 
    printf("%s ...",s);
     
    free(s);
    free(b);  

}

char * s1(char* b){
    return b;
}

วันพฤหัสบดีที่ 3 พฤศจิกายน พ.ศ. 2559

โปรแกรมเมอร์หายาก ทำไมถึงหาโปรแกรมเมอร์มาทำงานได้ยาก

ได้อ่านจากเว็บหลายเว็บเขียนว่าโปรแกรมเมอร์หายาก คนจบสายโปรแกรมมิ่งจะทำงานเขียนโปรแกรมจริงๆ แค่ราวๆ 5-10%

สำหรับผมไม่มีข้อมูลสถิติอะไรมานำเสนอ แต่อยากจะอธิบายให้เห็นภาพทำไมคนถึงไม่อยากเป็นโปรแกรมเมอร์กัน

1. การพิมพ์ปริมาณมาก บางคนอาจจะคิดว่าเขียนโปรแกรมนั้นพิมพ์แค่ 2-3 บรรทัดก็ทำงานได้แล้ว แต่ความจริงโปรแกรมง่ายๆ โปรแกรมหนึ่ง อาจจะต้องเขียนถึง 1000 บรรทัด ไม่ต้องพูดถึงโปรแกรมที่ซับซ้อนมากกว่าบางโปรแกรมเขียนมากกว่า 100000 บรรทัด

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

3. ต้องอาศัยความชอบเป็นพิเศษถึงจะก้าวหน้าได้ดี เป็นการเข้าใจผิดอย่างมากถ้าคิดว่าไปเรียนแล้วไม่ต้องศึกษาค้นคว้าอย่างต่อเนื่อง การเขียนโปรแกรมคือการประดิษฐ์รูปแบบหนึ่ง เราสามารถเอาความรู้ทั้งมวลที่เรามี มาประกอบเป็นชิ้นงาน program ขึ้น ยิ่งมีความรู้มากเท่าไหร่ คุณภาพคุณสมบัติของผลงานจะยิ่งดีเพิ่มมากขึ้น

4. จะต้องมีนิสัยชอบแก้ปัญหา ยิ่งเจอโจทย์ที่ยากก็อยากจะลองทำ ถ้าเจอปัญหาแล้วอยากจะแก้แบบนี้เป็นบุคลิคที่เหมาะสมที่จะเป็นโปรแกรมเมอร์อย่างมากครับ คนส่วนใหญ่จะไม่อยากที่จะเจอปัญหาใหม่ๆ แต่โปรแกรมเมอร์ชอบเจอปัญหาใหม่ๆ เพราะไม่ชอบเขียนโปรแกรมซ้ำๆ ครับ

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

6. สนุกในการเขียนโปรแกรม โปรแกรมเมอร์เก่งๆ ไม่จำเป็นต้องจบสายโปรแกรมเมอร์ครับ ใครก็ตามบอกว่าเขียนโปรแกรมสนุก คนนั้นคือคนที่เป็นโปรแกรมเมอร์ที่ดีได้แน่นอนครับ

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

วันเสาร์ที่ 20 สิงหาคม พ.ศ. 2559

การตั้งชื่อโดเมนเนม

การตั้งชื่อโดเมนเนมมักจะเจอปัญหาในการตั้งชื่อแล้วเจอแต่ชื่อซ้ำ
แต่ก็มีคนทำเครื่องมือช่วยคิดชื่อ domainname ไว้ให้ ช่วยให้ประหยัดเวลาในการคิดชื่อเว็บได้มากเลยครับ

http://www.leandomainsearch.com/

http://www.bustaname.com/word_maker

https://www.shopify.com/tools/business-name-generator

http://www.namemesh.com/domain-name-search/

วันอาทิตย์ที่ 14 สิงหาคม พ.ศ. 2559

Strength

ทดสอบหา Strength ของตัวเองมาจากเว็บไซต์หนึ่ง

ตรงหัวข้อ Optimism น่าจะจริงเพราะงานอดิเรกของผมก็คือ rewrite code ตัวเองที่เคยเขียนไว้ให้ดีขึ้นๆหรือบางทีแค่ให้โค้ดเป็นระเบียบขึ้นเฉยๆ แต่ตรง Innovation นี่สิหมายถึงอะไร bookmark ไว้เอาไว้ทำความเข้าใจวันหลัง -__-'


Your Top 5 Strengths Are:
Innovation (100%): 

* Actively seek out positions where your ideas will be valued and encouraged.
* Be a designer, sales strategies, marketing guru, or customer service rep for new products and ideas.
* Search out and request ideas from others to stimulate your thinking.
* Constantly think of ideas that can improve businesses and the lives of others.
* You enjoy the power of words; punchy ideas stimulate your thinking - focus and play with this fact.
* For decisions, you need to know that everything fits together. Be aware and plan for decisions.
* If a decision seems to stand out as particularly bothersome, then check if it is an exception before worrying about it.
Optimism (94%): 

* Look for positions where you can be as close to customers as possible.
* Actively help plan events - like new product launches and user groups.
* Do use your humor and good attitude to excite people.
* Being positive does not mean you'll be in good mood - be aware and let others know, as needed.
* Cynics quickly sap your energy and you dislike cheering negative people - minimize these instances.
* You enjoy celebrating and should actively find ways to recognize achievements.
Faith (94%): 

* Make efforts to discover your true passion and tie it to your work, no matter what you do.
* Align, but don't compromise, your values to that of your organization.
* You respect others for learning about your family and community - give them the opportunity.
* You give more value to greater levels of service than more money - let others know this.
* People may not share your beliefs, but you feel they need to understand & respect - let them.
Self Motivation (88%):

* You don't need your hand-held; help others understand you need space to make meaningful decisions.
* Seek to take on a role where persistence is essential to success.
* Continually take on roles that demand an aura of certainty and stability.
* You have a strong self-concept that you are an agent of action - nurture it.
* You are most effective when you feel you are in control of your world - be aware and help others understand this.
* You need clear feedback to develop your instincts - review your failures and successes for lessons learned.
Strategic Thinking (88%): 

* Be on the leading edge of your organization, groups, and strategic plans.
* Be involved in organizational planning and risk management efforts.
* Always give yourself plenty of time to think through a situation.
* Read books, take a training course, or attend a seminar in strategic planning and futurism.
* Seek chances to share your ideas in writing and presentations.
* Seek solutions that worked in other places, learn from them, and try to apply them to your life and work.
Your Remaining Results Are:
Risk Taking (88%):
Communication (81%):
Purpose (81%):
Curiosity (81%):
Problem Solving (75%):
Ambition (75%):
Balance (69%):
Visionary (63%):
Resourcefulness (63%):
Leadership (63%):
Focus (56%):
Salesmanship (56%):
Teamwork (56%):
Adaptability (44%):
Integrity (25%):


Your Bottom 1 Weakness Is:
Determination (19%):


* Constantly be on the lookout for new goals and improvements.
* You're good at initiating and organizing a project, start your own and help others.
* Get feedback from people as others' expectations will energize you.
* Actively participate in helping a bogged down team into action.
* When down, think of new improvements to do tomorrow - stay on track.
* Be careful of those who really want to project and analyze - they are a non-fit for your work style!

Thank Website
http://richardstep.com/richardstep-strengths-weaknesses-aptitude-test/free-aptitude-test-find-your-strengths-weaknesses-online-version/

วันอาทิตย์ที่ 17 มกราคม พ.ศ. 2559

หลักการ submit โปรแกรมใน codecanyon

หลักการ submit โปรแกรมใน codecanyon

- ชื่ออธิบายตรงกับโปรแกรม
- ตั้งชื่อแบบ Camelcase ยกเว้น is,of,an และคำสั้นๆ (1-3 ตัวอักษร)
- และยกเว้นคำย่อเช่น CMS
- ใช้คำ industry standard เช่น jQuery และ WordPress
- ไม่ใช้คำอธิบายไม่มีความชัดเจน เช่น best, beautiful file
- คำที่ไม่เกี่ยวข้องเช่น username และคำที่ไม่เกี่ยวกับไฟล์
- ไม่ใช้คำว่าคล้ายๆ กับอะไร ให้คำอธิบายว่าจริงๆ มันคืออะไร
- คำอธิบายไม่เกิน 100 ตัวอักษร
- คำอธิบายชัดเจน เพราะคนซื้อทุกคนไม่ได้เชี่ยวชาญ
- อธิบายข้อมูลเชิงเทคนิคทั้งหมด เพื่อให้เข้าใจว่าคืออะไร และทำอะไรได้บ้าง
- ลองคิดตัวเองว่าเป็นคนซื้อจะ search ยังไง ข้อมูลอะไรที่ต้องการทราบ
- แสดงภาพตัวอย่างของ item ของคุณที่กำลังทำงาน
- แบ่งช่องไฟและย่อหน้าให้อ่านง่าย
- ห้ามใช้ชื่อสินค้าของคนอื่นใน item tags

- ชื่อแรกควรเป็นคำนามหรือกิจกรรม
- ถ้าชื่อเกี่ยวข้องกับฟิลด์ หรือกลุ่มอุตสาหกรรม หรือ เฉพาะทางให้ระบุให้ชัดเจน
- ระบุ function การทำงานเช่น tileable image
- mood หรือ style เช่น รูปแบบของ theme แต่ไม่ใช้คำที่กว้างเกินไป
- ไม่ใช้คำที่กำกวม
- เช็คคำสะกด
- อาจจะใช้คำสองคำขึ้นไปได้
- ไม่ใช้ Camelcase ยกเว้นคำย่อ

ลิงค์ที่จะใช้ได้ใน description
- ลิงค์เกี่ยวกับคุณสมบัติและที่มาที่จำเป้น
- เอกสารวิธีใช้ online, support forum แต่ต้องไม่เชื่อมโยงไปถึงลิงค์คู่แข่ง
- เนื้อหา third party plugin เพื่ออธิบายเชิงเทคนิค, api ฯลฯ
- ตัวอย่างเพิ่มเติม demo
- social media account
- ไม่อนุญาติให้ลิงค์ไปยังลิงค์คู่แข่ง

Image Preview
- ขนาด 590x300 jpg ที่ไม่มี logo ของเว็บที่มีชื่อเสียง
Thumbnail
- ขนาด 80x80 jpg,gif,png

ไฟล์หลัก (Main File)
- ชัดเจนและจัดลำดับได้ดี
- รูปตัวอย่างเพิ่มเติม jpg และใหญ่ไม่เกิน 900x900
โดยตั้งชื่อในแบบ 01_preview1.jpg, 02_preview2.jpg
โดยแยกรูปไว้ใน folder เฉพาะสำหรับรูปภาพเพิ่มเติม

Tag
- จำกัดอยู่ที่ 15 tags

Comment
- 1 comment or more per function
- descriptive comment than short comment

โครงสร้างไฟล์
- แบ่ง folder ส่วนที่เกี่ยวข้องใน folder เดียวกัน
- การแก้ไขได้ง่าย
- validate แล้ว
- style ที่ดีและ best practice
- ห้ามใส่ script, document, image ไว้ใน root folder ที่เดียวกัน
- html5 จะต้องไม่มี javascript
- App จะต้องเน้นการช่วยเหลือ work flow สำหรับ web developer
- Plugin จะต้องมีตัวอย่างและฟังชั่นใน server ของคุณ
- เช็คว่า asset สามารถนำมาขายร่วมได้

help file
- pdf, doc, txt หรือ html
- ควรจะทำให้มองเห็นภาพ
- ควรจะมีภาพ แต่ไม่ควรใช้แทน text ขั้นตอนการใช้งาน
- อาจจะใช้ Screenr.com ที่จะใช้บันทึกวิธีการใช้



วันอาทิตย์ที่ 6 ธันวาคม พ.ศ. 2558

Create diff file with php xdiff

โค้ดแสดงบรรทัดที่มีการเปลี่ยนแปลงในไฟล์เริ่มต้นและไฟล์อัพเดตล่าสุด
จะมีประโยชน์ในการ compare ให้โปรแกรมเมอร์หรือผู้ที่ต้องการตรวจสอบแก้ไขไฟล์
ให้สามารถหาตำแหน่งแก้ไขเพิ่มเติมหรือแก้ปัญหาที่เกิดขึ้นได้อย่างสะดวกรวดเร็ว
ใช้คำสั่ง xdiff_file_diff ซึ่งต้อง download dll มาลงเป็น extension ก่อนครับที่ลิงค์
http://pecl.php.net/package/xdiff
<?php

function rec($path,$target,$diff){
 $h = opendir($path);
 $time = time();
 $day = 60*60*24;
 $dayAmount = $day*5;
 while($file = readdir($h)){
  if ($file != '.' && $file != '..' && $file != '.git' && $file != 'nbproject'){
   if (is_dir($path.'/'.$file)){
    rec($path.'/'.$file,$target.'/'.$file,$diff.'/'.$file);
   }else{
    $mtime = filemtime($target.'/'.$file);
    if ($time - $mtime < $dayAmount){
     $p1 = str_replace("\\",'/',$path).'/'.$file;
     $p2 = str_replace("\\",'/',$target).'/'.$file;
     $p3 = str_replace("\\",'/',$diff).'/'.$file;
     $tdir = dirname($p3);
     @mkdir($tdir,0777,true);
     xdiff_file_diff($p1, $p2, $p3, 2);
     
     echo "<pre>\r\n=====================================================\r\n\r\n";
     echo '<strong>',str_replace('C:/wamp/www/diff','',$p3)."</strong><br>";
     $a = file($p3);
     foreach($a as $line){
      if (substr($line,0,1)=='-'){
       echo '<span style="color:red">',htmlspecialchars(substr($line,1)),'</span>';
      }
      elseif (substr($line,0,1)=='+'){
       echo '<span style="color:limegreen">',htmlspecialchars(substr($line,1)),'</span>';
      }
      elseif (substr($line,0,2)=='@@'){
       preg_match('/^@@ \-\d+\,\d+ \+(\d+)\,\d+/',$line,$matches);
       echo '<span style="color:#6495ED;">บรรทัดที่  '.$matches[1],'</span>';
      }
      else{
       echo htmlspecialchars($line);
      }
     }
     echo '</pre>';
    }
   }
  }
 }
}

header('Content-type:text/html;charset=utf-8');
rec('C:\wamp\www\init-code','C:\wamp\www\update-code','C:\wamp\www\diff');

วันศุกร์ที่ 25 กันยายน พ.ศ. 2558

cordova build error

หลังจาก update cordova เวอชั่นใหม่หรือ plugin version ใหม่
พอจะ build โปรแกรมมักจะเกิดปัญหาแปลกๆ อยู่เสมอ
บางทีก็แจ้ง error ที่ไม่เข้าใจ ตัวอย่างเช่น
cordova build failed with exit code 8
cordova build failed with exit code 1
cordova build failed with exit code 2
ซึ่งส่วนใหญ่มักจะเกิดจาก plugin หรือโค้ด java มีปัญหาบางอย่างนั่นเองครับ

เพื่อให้แสดง error ที่ละเอียดมากขึ้นให้ลองทำตามนี้ดูครับ

cordova platform remove android
cordova platform add android
cordova build android