Month: February 2011

Python GUI calc

Python GUI experiment. Simple calculator application made with Tk.
It’s a first choice because it’s integrated into Python, simple to use and powerful enough for most cases. It’s also cross platform like an interpreter.
However, there are many other libraries for GUI:
http://wiki.python.org/moin/GuiProgramming

#!/usr/bin/python

# Python GUI calculator 
# (C) 2011 - netquote.it
# Original code by Emanuele Chiabrera
# Enhanced by Toropov Ivan 

from Tkinter import *

# button text list
cmdlst = ['7', '8', '9', '+', '%',
          '4', '5', '6', '-', '**',
          '1', '2', '3', '*', '//',
          '.', '0', 'CL', '/', '=']

class MyButton(Button):
    
    backref = None
    
    def Click(self):
        # back reference
        self.backref.BtnCmd(self["text"])


class CalcApp:

    def __init__(self, master):
        frame = Frame(master)
        
        self.textbox = Entry(width=30, takefocus=1)
        self.textbox.pack(side=TOP)
        self.textbox.focus_force()

        self.buttons = []
        for n, c in enumerate(cmdlst):
            self.buttons.append(MyButton(frame, text=c, width=5))
            self.buttons[n]["command"] = self.buttons[n].Click
            self.buttons[n].backref = self
            self.buttons[n].grid(row=n/5, column=n%5)

        frame.pack()

    def BtnCmd(self, cmd):
        if cmd == '=':
            try:
                res = eval(self.textbox.get())
            except:
                res = "Error!"
            self.textbox.delete(0, END)
            self.textbox.insert(0, str(res))
        elif cmd == 'CL':
            self.textbox.delete(0, END)
        else:
            self.textbox.insert(END, cmd)

root = Tk()
root.title("EWCalc")

calcapp = CalcApp(root)
root.mainloop()

What comes out:

Voltage Drop Protection

DC motor drive circuit with automatic load regulation. Main concept is to cut off power from DC Motor and sustain the voltage in the circuit. Also detect low-battery state.

Components:
#1 – Dual Op-Amp CA158 (Like LM358)
#1 – Trimmer 4.7 kΩ (voltage limit regulator)
#1 – NPN-MOSFET IRF530 (14A, 100V)
#1 – Capacitor C 0,1 µF
#1 – Capacitor C 0,33 µF
#1 – Led (Green – Bat ok)
#1 – Led (Red – Bat low)
#2 – Resistor R 220 Ω
#3 – Resistor R 15 kΩ
#1 – Brushed DC-Motor Permax 400 (6V)

Fonera 2.0n hardware

Model Name

Fonera SDK is originally based on Ralink SDK, also derived from OpenWRT project.

Build instructions can be found on this pages:
http://wiki.fon.com/wiki/Fonera_2.0n
http://www.netquote.it/nqmain/2011/02/fonera-2-0n-hardware/
http://trac.fonosfera.org/fon-ng/wiki/build

Download and build sources:
svn co http://svn.fonosfera.org/fon-ng/tags/2.3.6.1/ fon-sdk
cd fon-sdk/
chmod +x install.sh
./install.sh
cd openwrt
make menuconfig


FON2303
Dimensions
30 mm x 157 mm x 127 mm (excluding antenna)
Power
12VDC, 1A (It seems to work with 6VDC)
Ports
#1 – USB 2.0/1.1
#1 – Ethernet WAN 10/100Mbps
#4 – Ethernet LAN 10/100Mbps
Antennas
#2 – 3dBi Dipole Fixed Antennas
CPU
SoC Ralink RT3052F 320/384 MHz MIPS24KEc
RAM
64 MB – (32 MB cpu internal + 2×16 MB external PSC A3V56S40ETP-G6)
Flash
8 MB – MX29LV640DBTC-90G

External links:
Product briefing
RT3052F CPU Ref.
Ralink ApSoC SDK 3301
SDK User’s manual
MX29LV640DBTC-90G

Fonera SDK is originally based on Ralink SDK, also derived from OpenWRT project.

Build instructions can be found on this pages:
http://wiki.fon.com/wiki/Fonera_2.0n
http://www.netquote.it/nqmain/2011/02/fonera-2-0n-hardware/
http://trac.fonosfera.org/fon-ng/wiki/build

Download and build sources:
svn co http://svn.fonosfera.org/fon-ng/tags/2.3.6.1/ fon-sdk
cd fon-sdk/
chmod +x install.sh
./install.sh
cd openwrt
make menuconfig

Dead after a few difficult years 🙁



			
		

Boost & RCF on Mac OSX with Xcode

Litle HowTo prepare Boost and RCF on Mac!
My work environment is Mac OS X Snow Leopard 10.6.6 and Xcode 3.2.5
Boost version is 1.45.0 and RCF version is 1.3

What is Boost and RCF?
Boost is a powerful and portable C++ library.
RCF is a Remote Call Framework something like RPC.

The two libraries written in C++ seems to be Cross Platform and Cross Compiler also 64 bit.
From RCF documentation only one thing must be done.
Use of the typedef’s in “boost/cstdint.hpp” for portability.

The first step is to download and compile boost.
The official site is http://www.boost.org/

Extract downloaded file to your working directory, start terminal and navigate to the root of the extracted boost directory then execute “bootstrap.sh”
It’s build a bjam command-line tool that drives the Boost Build system.

cd ~/Documents/boost_1_45_0/
./bootstrap.sh --with-libraries=all

Run bjam and wait, wait a lot!

./bjam --layout=tagged variant=debug -j 2 architecture=combined-x86-power stage

————(OPTIONS)————
--toolset=darwin
Apple’s version of the GCC toolchain with support for Darwin and MacOS X features such as frameworks.
--build-type=complete
Build all supported variants of the libraries.
--layout=tagged
Names of boost binaries include the encoded build properties such as variant and threading.
--with-<libraryname>
Build specified library.
--show-libraries
Displays the list of Boost libraries.
--clean
Remove targets instead of building.
-j N
Run up to N commands in parallel. Only for multiprocessor compilation.
————(PROPERTIES)————
address-model=32,64,32_64
Explicitly request either 32-bit or 64-bit code generation.
runtime-link=shared,static
Linking to the C++ standard library and compiler runtime support libraries.
link=shared,static
Determines if bjam creates shared or static libraries.
threading=single,multi
Cause the produced binaries to be thread-safe.
variant=debug,release,profile,debug-python
Choosing a specific build variant by adding release or debug.
architecture=x86,ia64,power,combined,combined-x86-power

Now boost library is compiled and ready. Next step is RCF framework.
The Official site is http://deltavsoft.com/
Download and extract RCF-1.3 to your working directory.

Create a new command-line project with Xcode.
Don’t forget to select “C++ stdc++” in Type box!

Go to “Project” menu and select “Edit project Settings” then select “Build” tag. Search for “Header Search Paths” settings and append RCF and Boost include path in the list. Search for Preprocessor Macro and add “RCF_USE_BOOST_ASIO”. Set also “Library Search Path” to “boost_1_45_0/stage/lib”.

Finally in the main window go to “Source” select and right-click, select “Add”, then “Existing Files”, navigate to “RCF-1.3/src/RCF”, find and add “RCF.cpp” file. Also go to “Targets” -> “Link Binary With Libraries” and add “libboost_system.a” and others “.a” files from the “boost_1_45_0/stage/lib” directory.

Open main.cpp and insert test code.

#include <iostream>
#include <rcf /Idl.hpp>
#include </rcf><rcf /RcfServer.hpp>
#include </rcf><rcf /TcpEndpoint.hpp>

RCF_BEGIN(I_Echo, "I_Echo")
RCF_METHOD_R1(std::string, echo, std::string)
RCF_END(I_Echo)

class Echo
{
public:
    std::string echo(const std::string &s)
    {
        return s;
    }
};

int main (int argc, char * const argv[])
{
	Echo echo;
	RCF::RcfServer server( RCF::TcpEndpoint("127.0.0.1", 50001));
	server.bind<I_Echo>(echo);
	server.start();
	std::cout < < "Server running..." << std::endl;

	RcfClient<I_Echo> client( RCF::TcpEndpoint("127.0.0.1", 50001));

	std::string dts;
	std::cin >> dts;

	std::string ecs = client.echo(dts);

	std::cout << "Echo: " << ecs << std::endl;

    return 0;
}

External links:
Boost.Build is a high-level build system http://www.highscore.de/cpp/boostbuild/
RCF User Guide http://deltavsoft.com/w/RcfUserGuide/1.3/index.html
Linking Custom Static Libraries from your iPhone Xcode Projects http://wiki.remobjects.com/wiki/Linking_Custom_Static_Libraries_from_your_iPhone_Xcode_Projects
The Boost C++ Libraries BoostBook Documentation Subset http://www.boost.org/doc/libs/1_45_0/doc/html/index.html
Compiling Boost for the iPhone http://iphone.galloway.me.uk/2009/11/compiling-boost-for-the-iphone/