Wednesday, September 30, 2015

Python GUI Debugging Tips

Code1:

#####################
# Example of event-driven code, buggy version

import simplegui

size = 10
radius = 10

# Define event handlers.

def incr_button_handler():
    """Increment the size."""
    global size
    size += 1
    label.set_text("Value: " + str(size))
    
def decr_button_handler():
    """Decrement the size."""
    global size
    # Insert check that size > 1, to make sure it stays positive
    # NOTE that this restriction has changed from the video
    # since draw_circle now throws an error if radius is zero
    if size > 1:
        size -= 1
        label.set_text("Value: " + str(size))

def change_circle_handler():
    """Change the circle radius."""
    global radius
    radius = size
    # Insert code to make radius label change.
    radiuslabel.set_text("Radius: " + str(radius))
    
def draw_handler(canvas):
    """Draw the circle."""
    canvas.draw_circle((100, 100), radius, 5, "Red")

# Create a frame and assign callbacks to event handlers.

frame = simplegui.create_frame("Home", 200, 200)
label = frame.add_label("Value: " + str(size))
frame.add_button("Increase", incr_button_handler)
frame.add_button("Decrease", decr_button_handler)
radiuslabel = frame.add_label("Radius: " + str(radius))
frame.add_button("Change circle", change_circle_handler)
frame.set_draw_handler(draw_handler)

# Start the frame animation

frame.start()

Monday, September 28, 2015

Stack and Queue

Stack Applications:
Parsing in a compiler
Java Virtual Machine
Undo in word
Back button in web browser
PostScript language for printers
Implementing function calls in a compiler
Arithmetic Calculation expression

Queue:

Monday, September 21, 2015

H1B

http://forum.murthy.com/index.php?/topic/41311-h1b-to-h4-while-looking-for-job/

http://www.mitbbs.com/bbsann2/life.faq/JobHunting/61/h1blayoff/M.1155936613.I0/

H1 - H4 - H1
是否应该withdraw H4
要看你新旧H1B之间是不是有GAP
一般情况是有的

所以你要做的不是withdraw H4
而是call USCIS
告诉他们你的新H1B已经批准了
而你的H4还在pending
USCIS需要尽快批准你的H4申请
而且要确保你的H4生效期早于新H1B的生效期
这样你的新H1B生效时会自动override H4
而H4也合法的cover了两个H1B之间的GAP
H1B -> H4 -> H1B 的整个过程就完整了

准备材料
http://bbs.wenxuecity.com/h1b/334955.html 
http://www.huaren.us/dispbbs.asp?boardid=333&Id=951285
http://blog.wenxuecity.com/myblog/14332/200709/147.html


Cap-subject H1B -> H4 -> Cap-Exempt H1B -> Cap-Subject H1B
http://www.hooyou.com/h-1b/h1b_portability.html

Friday, September 18, 2015

经验之谈

来源:http://www.mitbbs.com/article_t/Java/31146699.html

HTML就是一个协议,按照HTML标准写的文本浏览器可以识别,知道怎么显示。你在这个
网页上右键然后选view source,看到的就是HTML
JS就是javascript, 主要功能就是在客户端(浏览器)做事,相对于HTML是静态的,他
是动态的,可以改变客户端的component, 比如标题拉,文本框拉,什么的
CSS就是定义HTML显示的style, 比如字体大小拉,颜色啦,等等等等
JSON主要是数据传输用的,比如javascript和后端服务器传递信息就可以用json
XML和HTML很类似,但是可以自定义tag和结构
MySQL/Oracle都是relational database, 说白了就是存数据的。但是作为relational 
database, 他需要满足一些标准。

你现在的阶段很多人都经历过,就是别人把框架布好,你可以往里填code。拉
一段具体的code出来能写,比如二叉树遍个历啥的,但是不知道这些code能干啥用,往
哪儿用,整体布局糊里糊涂。其实是初学者突然接触到大量知识不知从何下手的正常反
应,有点象盲人摸象,扣到了不少具体的知识点,但是对全局缺乏概念。

走出这个阶段有两个方法,一个是计算机科班出身的方法,每个知识点都学的很细,硬
学,几年下来,这些知识点自然就连起来了。这个方法的优点是基础打的扎实,缺点是
太花时间,很可能花了很多时间去搞没啥用的东西。另一个方法就是我常常推荐给转行
的朋友的,先不要纠结于学会具体的某个技术的某个细节,那些其实都很简单,学的快
忘得也快。先花点时间画个框架出来,搞清楚你要学的技术起到了什么作用,确定自己
理解了,再看那些具体的技术就清楚多了。

以你刚才列的那些东西为例子。一个典型的java based web application:

用户面对的是浏览器,你输入一个URL,浏览器从web server (apache, IIS, etc)那里
下载了HTML, CSS, JS。HTML一般是用来做些基本的网页显示,CSS决定他的style,JS
决定一些动态的东西,比如根据用户名来显示不同的内容。除了这些静态的内容,浏览
器也可能通过web server和它背后的app server对话(比如tomcat),进行一些服务器
端的处理(比如运行在tomcat内部的servlets)。这些web application难免要储存一些
数据,他们可以储存在database里(mysql, oracle, etc)。而servlet和database的读
写通过JDBC来完成。

有了这个基本的概念,下次看到JS,脑子里就明白,他是在浏览器上做动态处理的,看
到mysql就知道,他是backend 存储数据的。

等你把握了这个框架,每个知识点都有常见的扩展,比如js有常用的库,jQuery, 
ExtJS, database要会最基本的sql query, 比如inner join, outer join, aggregate 
function, etc., 你的servlet要在tomcat中运行,需要先以war的形式deploy。具体
的东西越是繁杂,你越要牢牢记住他们在一个大框架里起了什么作用,这样才不会糊里
糊涂,东一榔头西一棒子。

good luck!

Jenkins

Setup master and slave machines
https://wiki.jenkins-ci.org/display/JENKINS/Step+by+step+guide+to+set+up+master+and+slave+machines

Tuesday, September 15, 2015

Python GUI Program

Program Structure:
    Globals (state)
    Helper Functions
    Classes (later)
    Define event handler
    Create a frame
    Register event handler
    Start frame & timers

Example:
# SimpleGUI program template

# Import the module
import simplegui

# Define global variables (program state)
counter = 0

# Define "helper" functions
def increment():
    global counter
    counter += 1
    
# Define event handler functions
def tick():
    increment()
    print counter

def buttonpress():
    global counter
    counter = 0

# Create a frame
frame = simplegui.create_frame("Simple GUI test", 100, 100)

# Register event handlers
timer = simplegui.create_timer(1000, tick)
frame.add_button("Click me!", buttonpress)

# Start frame and timers
frame.start()
timer.start()

Canvas (Drawing on GUI):

# first example of drawing on the canvas

import simplegui

# define draw handler
def draw(canvas):
    canvas.draw_text("Hello!",[100, 100], 24, "White")
    canvas.draw_circle([100, 100], 2, 2, "Red")

# create frame
frame = simplegui.create_frame("Text drawing", 300, 200)

# register draw handler    
frame.set_draw_handler(draw)

# start frame
frame.start()
Interactive Drawing
# interactive application to convert a float in dollars and cents

import simplegui

# define global value

value = 3.12

# Handle single quantity
def convert_units(val, name):
    result = str(val) + " " + name
    if val > 1:
        result = result + "s"
    return result
        
# convert xx.yy to xx dollars and yy cents
def convert(val):
    # Split into dollars and cents
    dollars = int(val)
    cents = int(round(100 * (val - dollars)))

    # Convert to strings
    dollars_string = convert_units(dollars, "dollar")
    cents_string = convert_units(cents, "cent")

    # return composite string
    if dollars == 0 and cents == 0:
        return "Broke!"
    elif dollars == 0:
        return cents_string
    elif cents == 0:
        return dollars_string
    else:
        return dollars_string + " and " + cents_string
    

# define draw handler
def draw(canvas):
    canvas.draw_text(convert(value), [60, 110], 24, "White")


# define an input field handler
def input_handler(text):
    global value
    value = float(text)


# create frame
frame = simplegui.create_frame("Converter", 400, 200)

# register event handlers
frame.set_draw_handler(draw)
frame.add_input("Enter value", input_handler, 100)


# start frame
frame.start()
Timer. Timer update for specified time interval. Draw update 60Hz.
# Simple "screensaver" program.

# Import modules
import simplegui
import random

# Global state
message = "Python is Fun!"
position = [50, 50]
width = 500
height = 500
interval = 2000

# Handler for text box
def update(text):
    global message
    message = text
    
# Handler for timer
def tick():
    x = random.randrange(0, width)
    y = random.randrange(0, height)
    position[0] = x
    position[1] = y

# Handler to draw on canvas
def draw(canvas):
    canvas.draw_text(message, position, 36, "Red")

# Create a frame 
frame = simplegui.create_frame("Home", width, height)

# Register event handlers
text = frame.add_input("Message:", update, 150)
frame.set_draw_handler(draw)
timer = simplegui.create_timer(interval, tick)

# Start the frame animation
frame.start()
timer.start()