יום חמישי, 24 בנובמבר 2016

שכפול אובייקטים ב- JavaScript באמצעות JSON פונקציות

Clone, Parse and Stringify JavaScript objects using JSON.parse and JSON.stringify without loosing functions in deep object:



function localStringify(obj) {
             return JSON.stringify(obj, function(key, val) { return (typeof val === 'function') ? val.toString() : val; });
}

function localParse(str) {
    return JSON.parse(str, function(key, val) { return (typeof val === 'string' && val.substring(0,8) === 'function') ? eval('(' + val + ')') : val; });
        }
 
function cloneObject(obj) {
    if (obj === null || typeof obj !== 'object') {
                return obj;
   }
       
    var temp = obj.constructor(); // give temp the original obj's constructor
    for (var key in obj) {
        temp[key] = cloneObject(obj[key]);
    }
       
   return temp;
}

יום שישי, 4 בנובמבר 2016

הרצת VNC ב - Linux לפני לוגין באמצעות x11vnc

הכדי להתחבר ב - vnc למחשב לינוקס מרוחק צריך לבצע לוגין לפני שה - VNC עולה. ולכן כדי להריץ x11vnc עבור מסך הלוגין עצמו, לפני שהתחברנו, ניתן להשתמש בפקודה:

sudo x11vnc -display :0 -auth guess


אחר כך אפשר להריץ את פקודת ה - x11vnc שתישאר לתמיד:

x11vnc -forever -usepw -xkb -nomodtweak
 

יום שלישי, 1 בנובמבר 2016

האפשרות ש - Microsoft Excel יוכל לקרוא קובץ CSV ב - UTF-8

עבודה עם אקסל יכולה להיות מאוד מרגיזה לפעמים.
לצערנו Excel עדיין עובד בברירת המחדל ב - Windows-1255 Encoding.
אבל מה אם אנחנו רוצים ליצור קובץ CSV מתקדם יותר ... נניח UTF8.
הפתרון נמצא ב - BOM:

 header("Content-Type: text/csv; charset=UTF-8");
 header("Content-Disposition: attachment; filename=$filename"); // Disable caching
 header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1
 header("Pragma: no-cache"); // HTTP 1.0
 header("Expires: 0"); // Proxies

 $out = fopen('php://output', 'w');
 $BOM = "\xEF\xBB\xBF"; // UTF-8 BOM
 fwrite($out, $BOM);
 $headlines = array("a", "b", "c");
 fputcsv($out, $headlines);

 // loop data here

 fclose($out);

יום חמישי, 24 בספטמבר 2015

תצוגה ייחודית לסטטיסטיקות ישראליות

אני ואחי יצרנו תצוגה מעניינת לראות אירועים יום יומיים ישראלים. כמה כסף עיריית תל-אביב עושה מדוחות על חניות ? - כמה כסף מרוויח בנק הפועלים בשניה ? - כל כמה זמן נולד ילד במדינה ? / מישהו מתגייס ? / כמה שקיות במבה מיוצרות בשנייה ? ... ועוד ועוד.

צריך לראות כדי להבין:


http://www.c2kb.com/israel-frequency/

תדירות ישראלית

יום שלישי, 15 בספטמבר 2015

Building a drawing robot in Geekcon 2015

On the last GeekCon 2015, me and my brother built a drawing robot.
Can draw on a large scale pages, basically working the same way Logo (Computer Language) Turtle is working. Can go forward, backward and turn around. Can raise the pen or lower it in order to start drawing.

Here are some pictures, explanations and code.

We used the Arduino Uno (actually Funduino Uno compatible) over a Maze car  rack bought in Deal Extreme. Using the Keyes L298 driver for the DC motors and a Servo motor using the original Servo.h library kit from Arduino.









Some external references helping us to go on:


Here is the code:
Also can be seen in Github:

// connect motor controller pins to Arduino digital pins
// motor one
int enA = 11;
int in1 = 2;
int in2 = 3;
// motor two
int enB = 6;
int in3 = 4;
int in4 = 5;
// servo pen
int servoPin = 13;
int speed = 255;


//Include for servo
#include   // servo library
//Define Servo
Servo servo;  // servo control object

void set_speed(int pin, int speed)
{
  //if(pin == enA)
  //  analogWrite(pin, 200);
  //else
    digitalWrite(pin, HIGH);
}


void setup()
{
  Serial.begin (9600);

  servo.attach(servoPin);
 
  // set all the motor control pins to outputs
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
}

void forward(int duration)
{
  Serial.println("Forward");
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  set_speed(enA, speed);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  set_speed(enB, speed);
  delay(duration);
}
void right(int duration)
{
  Serial.println("Right");
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH); 
  set_speed(enA, speed);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  set_speed(enB, speed);
  delay(duration);
}
void left(int duration)
{
  Serial.println("Right");
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW); 
  set_speed(enA, speed);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  set_speed(enB, speed);
  delay(duration);
}
void sstop(int duration)
{
  // now turn off motors
  Serial.println("Off");
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW); 
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
 
  delay(duration);
}
void drawSquare()
{
  Serial.println("drawSquare start");

  // malben - starts from the lower left corner
  forward(1100);
  right(270); 
  forward(800);
  right(270);
  forward(1100);
  right(270);
  forward(800);
  right(270); 
}
void drawZigzag()
{
  Serial.println("drawZigzag start");

  // forward zigzag
  right(100);
  forward(300);
  left(200);
  forward(300);
  right(200);
  forward(300);
  left(200);
  forward(300);
  right(100);
}

void penDown()
{
  servo.write(90);
  Serial.println("Pen Down");
}

void penUp()
{
  servo.write(180);
  Serial.println("Pen Up");
}

void loop()
{
  penUp();
  delay(7000);
 
  penDown();
  drawSquare();

  penUp();
  sstop(1000);
  right(200);
  forward(300);
  left(200);

  //sstop(1000);

  penDown();
  drawZigzag();

  sstop(1000);
}



יום שלישי, 8 בספטמבר 2015

Google Updated Their Logo but Ruined the Google Calendar Updating Favicon

On first of September (2015) a week ago, Google updated their logo, to a new one. They also updated the Favicon, but on the way looks like they have ruined the Google Calendar Updating Favicon.

Before the update, the Google Calendar Favicon was updating and showing today date (day of the month) - Very cool. Now it's just another tab with the same Google favicon logo as any other tab or window. 

Now - Bad:






Before - Good: