Showing posts with label gnuplot. Show all posts
Showing posts with label gnuplot. Show all posts

Wednesday, May 23, 2012

FreeBSD: ports --> graphics --> epix

epix เป็นอีกหนึ่งโปรแกรม ที่ทำให้เราเขียนกราฟที่ยุ่งยากให้ง่ายเข้า แต่ งวดนี้แตกต่างจาก gnuplot ที่ว่า ต้องอาศัยเครื่องมือของ TeX เป็นหลัก นั่นก็หมายถึงว่า ผู้ใช้ ก็ต้องเป็นผู้ที่รู้เรื่อง TeX ดีพอตัว

ไปลงจาก ports ใน category graphics ครับ ชื่อก็ epix  ไม่ต้องกังวลเรื่องการใช้งาน เขามีคู่มือมาให้ในรูปแฟ้ม .pdf อ่านกันสบายๆ

Riemann
ข้อที่ถือว่าดี ควรค่าแก่การแนะนำคือ สามารถผลิต animation เล็กๆ ออกมาได้  แต่ทั้งนี้ ก็อย่างที่ว่า ผู้ใช้งานต้องมีพื้นความรู้พอตัว ไม่ว่าจะเป็นในเรื่องของการเขียนโปรแกรมด้วยภาษา C/C++ หรือ การใช้งาน LaTeX ที่ค่อนข้างยุ่งยากเอาการอยู่ เป็นเรื่องที่ ต้องมีไว้ รวมไปถึงการใช้งาน macro ยักษ์ อย่าง emacs ด้วย โดยเฉพาะอย่างยิ่ง อันหลังนี้ถือว่า เป็นหัวใจ ในการเขียนฟังก์ชั่น สำหรับผลิตกราฟที่เราต้องการออกมา แม้จะเป็น editors แต่ก็ได้รับการ ปรับ มาให้เป็นการจำเพาะแล้ว ต้องรู้จักด้วย ไม่งั้น  เอาไม่อยู่ แน่แน่

การใช้งานก็ง่าย
๑) เขียนแฟ้มสำหรับเขียนกราฟขึ้นมา ซึ่งไวยากรณ์คือ ภาษา C/C++
๒) เรียก script ที่เขาทำมาให้เพื่อมา process แฟ้มที่เขียนขึ้น
๓) เอากราฟไปใช้งาน

ตัวอย่างที่แสดงให้ดูนั้น แฟ้มในข้อ ๑) เป็นดังนี้
/* -*-ePiX-*- */
#include "epix.h"
using namespace ePiX;

P F(double t, double r, double theta)
{
  return P(r*r*Cos(2*theta),
           r*r*Cos(t)*Sin(2*theta) + r*Sin(t)*Sin(theta),
           r*Cos(theta));
}

domain R(P(0,0,0), P(1, 1.5, 1), mesh(24, 8, 32), mesh(24, 40, 80));

int main(int argc, char* argv[])
{
  if (argc == 3)
    {
      char* arg;
      double temp1, temp2;
      temp1=strtod(argv[1], &arg);
      temp2=strtod(argv[2], &arg);

      tix()=temp1/temp2;
    }

  domain R1(R.slice1(tix()));

  picture(P(-4,-4),P(4,4), "5x5in");

  begin();
  revolutions();

  grid(1,1);

  const P ctr(3.25,-3.25); // "clock" center
  bold();
  circle(ctr, 0.5);        // clock face

  line(ctr, ctr+polar(0.4, tix())); // hands
  label(ctr+polar(0.6, tix()), "$y$");

  line(ctr, ctr+polar(0.4, tix()+0.25));
  label(ctr+polar(0.6, tix()+0.25), "$w$");

  viewpoint(4,5,3);
  camera.range(20);

  line(P(0,0,0), P(3,0,0));
  line(P(0,0,0), P(0,3,0));
  line(P(0,0,0), P(0,0,2));

  plain(Red());
  plot(F, R1.resize3(0, 0.5));

  blue();
  plot(F, R1.resize3(0.5, 1));

  bold(Magenta());
  plot(F, R.slice3(0));
  plot(F, R.slice3(0.5));

  black();
  masklabel(P(3,0,0), "$x$");
  masklabel(P(0,3,0), "$y$");
  masklabel(P(0,0,2), P(-4,0), "$z=\\textrm{Re}\\,\\sqrt{x+iy}$", tr);

  end();
}

แฟ้มนี้ชื่อ riemann.flx ซึ่งเมื่อ process โดย script ที่ชื่อ flix แล้ว ก็ได้ผลที่แสดงมาให้ดูนั่นแหละ

% flix  --gif  riemann.flx

ผลลัพธ์ที่ได้ สามารถนำไปใช้งานร่วมกับ latex ได้เลย ในการผลิตเอกสารต่างๆ ที่ต้องการรูป ที่ยุ่งๆ

% epix  riemann.flx

เราจะได้แฟ้ม riemann.eepic ซึ่งมาสามารถนำไปรวมในแฟ้มที่เตรียมโดย LaTeX ได้ทันที
script ที่ให้มา เขาว่ามีอยู่ ๔ แต่เห็นใช้งานจริงตอนนี้เพียง epix, flix และ elaps  ซึ่งหากเราใช้กับแฟ้มตัวอย่าง ข้างบนนั้น ยกเว้น flix ที่ให้ผลลัพธ์มาเลยแล้ว ก็จะเป็นดั่งนี้

% epix  riemann.flx
% elaps riemann

คำสั่งสุดท้าย จะให้แฟ้ม riemann.eps ออกมาเป็นผลลัพธ์

ไม่ต้องตกอกตกใจอะไรกับสาระในแฟ้ม ขอให้ท่านลงโปรแกรม แล้วอ่านข้อความท้ายๆ ทำตามนั้น เวลาจะเขียนแฟ้ม ก็ให้กระทำผ่าน emacs ท่านก็จะได้ template มา พร้อมที่จะเติมไปทีละคำสั่ง ทีละคำสั่ง

คำสั่งที่ท่านต้องเติม ก็อยู่ระหว่าง begin();  และ  end(); นั่นหละ ค่อยๆอ่านจาก เอกสารที่เขาให้มา แล้วดูแฟ้มตัวอย่างจาก sample files ที่เขาให้มา ไม่นานนักก็คงบรรลุธรรม

พาดพิงถึง LaTeX แล้วคิดถึงเจ้าปลิวแฮะ

Thursday, July 28, 2011

pr : problem report --> autobench

เคยลงไปหนนึง ที่ว่า ไม่รู้ทำไรเลยทำ benchmarking เล่นๆดู นั่นแหละ
พวกที่ ทำอะไรแก้กลุ้ม ทำอะไรเล่นๆ อยู่นี่แหละ ได้เรื่องเยอะเลย เพราะ งวดนั้น ดันไปเจอบั้คเข้าตัวเบอเรอ ทั้งๆที่ไม่อยากเจอ (ที่อยากเจอ กลับไม่เจอ)

ก็ สับมิดรีพอท เอ้ย สับมิด โปร้บ ปเล่ม รีพอต ไป gnuplot syntax ให้ทางฝ่ายโน้นเขารับทราบ

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

Monday, July 4, 2011

FreeBSD: ports ---> autobench & bench2graph

วานนี้ นั่งวัด performance ด้าน http ของ core i5 ที่เพิ่งได้มาใช้ ด้วย autobench จาก ports เพราะสังเกตุเห็นว่า ที่บ้านน้องโซล เรียกเข้ามาดูรูปได้ช้ามาก ช้าชนิดที่พอพอกับเมื่อสมัย 1982 ประมาณนั้น

ใช้โปรแกรม autobench จาก benchmark/autobench ของ FreeBSD ports ครับ ยังไม่ว่างพอเขียนเองหรอก เลือกตัวนี้ เพราะเห็นว่ามีผลลัพธ์เป็น กราฟ ออกมาให้ดูได้เข้าใจง่ายๆ

เมื่อติดตั้งเสร็จแล้วก็สั่ง

# autobench --single_host --quiet --file result-1000.tsv --num_conn 1000 --uri1 /gallery3
# bench2graph result-1000.tsv result-1000.ps

กลับได้ errors มาแทน และเมื่อตามไปดูก็พบว่า ตัว script ที่ชื่อ bench2graph ที่เป็นส่วนของโปรแกรม autobench นั้น เขียน script สำหรับ gnuplot ด้วยไวยากรณ์เก่าเกินไป ซึ่งเวอร์ชั่นของ gnuplot ไม่ยอมรับแล้ว

เมื่อทราบความจริง จึงแก้ไข bench2graph ให้เขียนให้ถูกไวยากรณ์ซะ ก็ โอเค และก็เลยส่ง problem report ไปให้ ports เขาทราบด้วย ตาม link นี้แหละ

Tuesday, April 12, 2011

gnupot โปรแกรมเอนกประสงค์ และ ฟรี

ผับที่แวะเวียนเข้าไป ยามว่าง
เขียนผ่านไปนานแล้ว จึงมาพบว่า สะกดคำผิดไป gnuplot ดันเขียนเป็น gnupot เออหนอ คนเราก็ยังงี้แหละ บอกแล้วไงว่า เขียนเอง อ่านเอง ตรวจเอง ยากที่จะหาที่ผิดพลาดเจอได้ง่ายๆ

ไม่เปลี่ยนมันหรอก ชื่อเรื่องน่ะ มาบอกกันในนี้เลยดีกว่า  บางที imperfect มันก็ make beauty ได้น่ะ

ไม่แก้ แต่ ขออภัยในความผิดพลาดครั้งนี้ด้วย แม้จะช้าไป ก็ ขออภัยด้วยครับ

๔ สิงหาคม ๒๕๕๔
๑๘.๐๐ นาฬิกาโดยประมาณ 

freshports เป็นหน้าเว้ป ที่ มะไฟ แวะเวียนเข้าไปดูอย่างสม่ำเสมอ เวลาว่างที่ ไม่มีอะไรทำ หรือ ยามมีปัญหา freshports ก็เป็นหนึ่งในที่ที่หาทางแก้ได้

เมื่อวานนี้ แวะเข้าไปเจอ maxima ให้สงสัยว่ามันคืออะไร
เพราะเห็นว่า FreeBSD ports เขายังมีระบบพีชคณิตให้อยู่ ซึ่งพีชคณิตนี้ เป้นการเรียนการสอนในระดับมัธยมศึกษาเท่านั้นเอง แม้ในระดับอุดมศึกษาจะมี ก็แต่ชั้นสูงเท่านั้นหรอก และมีไม่กี่แห่งด้วย จึงให้สงสัย

ผิวนอกของ maxima
maxima เป็น ระบบการเรียนรู้พีชคณิต ด้วยคอมพิวเตอร์ สามารถ สอน พล้อตกราฟ ให้การนำเสนอได้ดี ดีมากเป็นที่เข้าใจของนักเรียนได้ ก็แล้วกัน และเมื่อเข้าไปดูรายละเอียดของเว้ปไซต์ แล้ว ตามไปดู screenshot เข้าอีกที ก็พบว่า หลายสิ่ง หลายอย่างเหลือเกิน ในเรื่องของ การพล้อตกราฟ นั้น gnuplot เป็นพระเอกจริงๆเพราะแม้ชื่อโปรแกรมที่เรียกใช้งานจะมีชื่อที่ผิดแผกแตกต่างกันไป แต่ตัวเนื้อใน หรือตัว แก่นของงาน จริงๆแล้วคือ gnuplot นั่นเอง

moebius curve ด้วย maxima
นอกเหนือไปจากนี้ ตัวที่ดำเนินงานของงาน ก็คือ clisp ซึ่งถ้าท่าน อืมม พี่พี่ซิ ยังงงงๆอยู่ว่ามันคืออะไร ก็ลองตัดตัว c ที่หมายถึง common หน้าคำ clisp ออก มันยิ่งทำให้มึนงงงไปกันใหญ่ เพราะเหลือเพียง LISP

แล้วอะไรคือ LISP อันนี้หากพิจารณาให้ดีจะพบสัจจธรรมด้วยตนเองเข้าจริงๆ เรียกว่า เป็น ปัจจัตตัง กล่าวคือ หากเราลำดับญาติ ของเราท่านขึ้นๆไป ทั้งสายคุณแม่ และสายคุณพ่อ ก็จะเห้น ลำดับของบุคคล ที่ประกอบกันขึ้นมาเป็นสาแหรกเครือญาติ อืมม น่าจะใช้คำผิดน่ะ แต่เอาเถอะ ไม่ใช่นักภาษา เอาเป้นว่า ได้ ลำดับเครือญาติ list of parents

อีกที อีกตัวอย่าง ถ้าเรามองลำดับเหตุการณ์ที่เกิดขึ้นกับตัวเราเอง แต่ละคน แต่ละคนไป (อันนี้ถ้าจะเขียนแบบมี ไม้ยมก คงต้องเขียนเป็น (แต่ละคน)ๆไป เน้าะ เพราะถ้าเขียน แต่ละคนๆไป ก็จะกลายเป็น แต่ละคนคนไป ซึ่งไม่ใช่สิ่งที่อยากเขียนออกมา) ก็พอมองออก เพราะง่ายดี ก็เรื่องของเรานี่หว่า แต่นั่นแหละ นั่นคือ ลำดับเหตุการณ์ list of events

อีกสักหนึ่งตัวอย่างของ LISP ถ้าไม่รู้จะเอาอะไรมาดี ก็ให้นึกถึงตัวเลขสองตัวท้ายรางวัลที่ออกทุกงวด สัก ๕ งวดสุดท้าย ของแต่ละปี ไล่ย้อนหลังไป ๗ ปีท้ายสุด แล้วเลือกมาสัก ปีหนึ่งก็แล้วกัน มันไม่มีอะไรเลย นอกจาก ลำดับของตัวเลข list of two digits

lists ทั้งหลายเหล่านี้ ถ้าเรานำมันมาประมวลผลเข้า หรือนำมา process เข้า ด้วยกฏเกณฑ์ที่ตั้งขึ้นมา ก็ทำให้ได้ผลลัพธ์ของการประมวลผล lists ต่างๆเหล่านั้น

แก่นของเรื่องราว gnuplot และ lisp
การประมวลผล lists ต่างๆเหล่านี้แหละ เรียกรวมๆว่า lists processing ที่คนเมื่อหลายปีก่อนเขียนย่อๆว่า LISP ซึ่งก็คือ LISt Processing หรือ LISP ในภาษา คอมพิวเตอร์ อีก ๑ ภาษา ที่ท่านต้องปวดหัวกับวงเล็บ ที่ยกตัวอย่างมาในนี้นั่นแหล อิอิ เอ้ย คริคริ

แบบจำลอง การเดินเครื่องปฏิกรณ์นิวเคลียร์  ที่ยกตัวอย่างมา รวมทั้งระบบผู้เชี่ยวชาญ ก็เขียนด้วย LISP นี่แหละน่อ

เรากลับมาที่ gnuplot กันอีกที ในคราวที่ได้รับคำสั่งให้เขียนโปรแกรมเคลื่อนที่ ๑ มิติ และแสดงผลออกมานั้น การแสดงผลด้วยกราฟ หากจะเขียนขึ่นมาเองอีกต่างหากเป็นกรณีจำเพาะ ก็ย่อมได้ แต่ข้อดีของ UNIX คือมี tools มากมายให้ใช้ เมื่อเป้นเช่นนี้ การทำซ้ำ จึงเป็นการสิ้นเปลืองอย่างยิ่ง  ในคราวนั้น ก็เลือกวิธีนี้มาแก้ปัญหา แม้จะดูไม่ถูกอก ไม่ถูกใจใครบางคน แต่ แก้ปัญหาได้ และ ประหยัดตังด้วย  โดยเลือกใช้ gnuplot มาเขียนกราฟของผลลัพธ์ แทนที่จะเขียนโปรแกรมขึ้นมา plot กราฟผลลัพธ์ อย่างที่เห่อๆทำกัน

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

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

Friday, March 11, 2011

blender ของดีสำหรับสร้างตัว

สทน เคยเปิดอบรม blender มาแล้วหนหนึ่ง และ ก่อนหน้านั้น มะไฟ ได้มีโอกาสไปอบรมเรื่องของ graphics ที่กระทรวงวิทยาศาสตร์ฯ เป็นครั้งแรก คือ gimp แลได้ขอร้องให้ทีมอบรมเขาจัดเรื่อง blender มาให้ทีเถอะ ดังนั้น เมื่อมีการอบรม blender ที่องครักษ์ จึงกระโจนเข้าไป โดยไม่สนใจเรื่องอื่นใดทั้งสิ้น

blender ใช้ยาก โดยเฉพาะอย่างยิ่งกับคนธรรมดาที่ไม่มีภูมิรู้ทาง graphics มาก่อนด้วยแล้ว ยิ่งยากมากเข้าไปอีก

การเขียนแก้วไวน์ โดยการหมุนเส้นโครง อย่างที่ทำใน gnuplot นั้นทำให้เข้าใจพื้นฐานได้หลายอย่าง มากกว่าเขียนโดยไม่เข้าใจ

BSD Magazine
สำหรับงานเล็กๆ ไม่เกิน ๙๐ วินาฑี มะไฟ ว่า นี่แหละ สุดยอดเลย blender

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

BSD Magazine เขาเอามาขยายให้ง่ายขึ้น สำหรับเพื่อนที่สนใจ แต่ไม่มีโอกาสได้อบรมที่ องครักษ์ โดย SIPA ในครั้งนั้น สามารถไปเอามาอ่านได้ฟรีๆ และแน่นอน โปรแกรมนี้ ทำรายได้ เพิ่มรายได้ให้ได้ โดยไม่มีต้นทุนอะไรเลย

กับทีมงานสัก สอง-สาม ถึง สี่คนแล้ว นี่แหละ สุดยอดเครื่องมือ

Thursday, April 8, 2010

FreeBSD: ---> ports --->gnuplot ทำกราฟ ที่ยุ่งยาก ให้ง่าย

commands

ลงซะ จาก ports แหละ ตรงๆเลย ที่ math/gnuplot
อย่างกับว่าจะ plot ระหว่าง ระยะทาง กับเวลา เมื่อความเร็วคงที่ เช่น speed=0.25 เวลาตั้งแต่ 0.05 วินาฑี ถึง 100 วินาฑี ก็สั่งง่ายง่าย จากในภายใน gnuplot เอง ดังนี้
set terminal png nocrop enhanced size 420,320
set output 'simple.1.png'
set key left box บอกว่า เอา label ไว้ทางซ้าย ในกล่อง
set sample 100 บอก จำนวนของ จุด บนแกน x
speed=0.25 อันนี้ กำหนดว่า ความเร็วเท่ากับ 0.25 meters per second
plot [0.05:100] speed*x สั่งให้เขียนกราฟ speed คูณด้วย x ในช่วงของค่า x จาก 0.05 ถึง 100

มันจะเก็บผลลัพธ์ไว้ในแฟ้ม simple.1.png ซึ่งเหมาะที่จะเอาไปทำงานอื่นได้


จะแย้งล่ะซิท่า แหม มันเส้นตรง ง่ายๆ งั้น ลอง plot ระหว่าง sin(x)/x และ x ดูซี

เขามี demostrations ให้ ขณะเดียวกัน ก็มีคู่มือ กึ่ง ติว ให้ด้วย ไปดาวโหลดมาอ่านได้ฟรี ไปค้นดู l-gnuplot-pdf.pdf น่ะ ตัวแอล ที่ย่อมาจากคำว่า library นั่นแหละ ระวังจะดูเป็นเลขหนึ่งไป มันจะผิดความหมายไปไกลโขเลย ถ้าไม่อยากค้น ก็ นี่เลย ไปเอามาได้เลยจากหน้านี้แหละ

นี่แหละ ของฟรี ที่ถามว่า ....ทำไมไม่มีคนใช้(ว่ะ)

ขนาด big blue เขายังยอมให้กับ FlOSS
แปลกใจจัง คงต้องไปถาม ทั้งไอซีที และ วว ดูซะล่ะมั้งเนี่ยน่ะ ฮึ

อิอิ มะไฟ ตัวน้อยๆ มิบังอาจ

View My Stats