I had a computer crash with a running Eclipse which resulted in a corrupt workspace.
I was simply getting message that workspace is in use.
While there is many proposed solutions on the internet the simplest one is to open .metadata folder in your workspace, make sure that you can see invisible (hidden) files there and remove .lock file.
Works like a charm and preserves all projects.
:)
Tuesday, 8 April 2014
Wednesday, 19 March 2014
Customizing django-registration
Whatz up?!
The integration of django-register is awesome! But if you want to customize it with additional models it can be confusing.
Here in example I will show how to create your custom backend, form to handle it (custom validator and model choice field).
Note, the django I use is version v1.5.4 django-registration v1.0. Some line breaks are imposed due to layout of this page.
Thus, bellow you will find everything you need to:
Below is and example extending
The integration of django-register is awesome! But if you want to customize it with additional models it can be confusing.
Here in example I will show how to create your custom backend, form to handle it (custom validator and model choice field).
Note, the django I use is version v1.5.4 django-registration v1.0. Some line breaks are imposed due to layout of this page.
Thus, bellow you will find everything you need to:
- Create custom backend
- Add custom form
- Create custom validation
- Badabung! :D
from registration.backends.default.views.RegistrationViewFirst of all, inherit RegistrationView, then override register() and get_form_class() functions. In the examples to follow it is assumed that the class is saved to regbackend.py.
#regbackend.py
from registration.backends.default.views import RegistrationView
#create custom registration backend
class StudentBackend(RegistrationView):
'''
we just want to override register and fix profile creation
'''
def register(self,request, **kwargs):
from usermanager.models import Profile
user=super(StudentBackend,self).register(request, **kwargs)
user.first_name = kwargs['first_name']
user.last_name = kwargs['last_name']
user.save()
profile = Profile.objects.create(
user=user, course=kwargs['course'])
profile.save()
def get_form_class(self, request):
"""
Return the default form class used for user registration.
"""
from usermanager.form import UserRegistrationForm
return UserRegistrationForm
Below is the code from urls.py. Nothing fancy, just import your registration backend, and form, and redirect accounts/register/ to your backend.
#urls.py
from regbackend import StudentBackend
from form import UserRegistrationForm
urlpatterns = patterns('',
url(r'^accounts/register/$',
StudentBackend.as_view(form_class = UserRegistrationForm),
name='registration_register'),
(r'^accounts/', include('registration.backends.default.urls')),
#more url configs
)
Following code is from form.py:
#form.py
from django import forms
from django.contrib.auth.models import User
from usermanager.models import Course, Profile
from registration.forms import RegistrationForm
from django.utils.translation import ugettext_lazy as _
attrs_dict = { 'class': 'required' }
#this function checks for the allowed domain:
def affiliation_valid_email(value):
allowed_domain=['domain.se','domain.se']
#not the prettiest soliution
v_error=_("Email does not match allowed domains (%s, %s)"
%(allowed_domain[0],allowed_domain[1])
if value.split('@')[1] not in allowed_domain:
raise forms.ValidationError(v_error)
else:
return value
#the registration form is inherited from django-registration
class UserRegistrationForm(RegistrationForm):
class Meta:
model = User
fields = ("first_name",
"last_name",
"username",
"email",
"password1",
"password2")
#username is enforced to some particular rules
u_error = _("User name needs to match domain convention.")
username = forms.RegexField(regex=r'^\w',
max_length=9,
widget=forms.TextInput(attrs=attrs_dict),
label=_("Username - same as in domain!"),
error_messages={
'invalid': u_error })
first_name = forms.CharField(max_length=30)
last_name = forms.CharField(max_length=30)
course = forms.ModelChoiceField(queryset=Course.objects,required=True)
email = forms.EmailField(validators=[affiliation_valid_email],
widget=forms.TextInput(
attrs=dict(attrs_dict,maxlength=75)
),
label=_("domain - Email address"))
def clean(self):
#clean with super
ue_error = _("Email and user name do not match.")
super(UserRegistrationForm, self).clean()
#this is just checking that username is the same as in email
if self.cleaned_data['email'].split('@')[0] ==
self.cleaned_data.get("username"):
return self.cleaned_data
else:
raise forms.ValidationError(ue_error)
def save(self, commit=True):
user = super(UserRegistrationForm, self).save(commit=True)
user.email = self.cleaned_data["email"]
user.first_name = self.cleaned_data["first_name"]
user.last_name =self.cleaned_data["last_name"]
profile = Profile(
systemuser=user, course = self.cleaned_data["course"])
if self.commit:
user.save()
profile.save()
return user
Models used in this example:
#models.py
class Course(models.Model):
code = models.CharField(max_length=6)
teacher = models.CharField(max_length=30)
class Meta:
app_label = "usermanager"
verbose_name = "Course"
verbose_name_plural = "Courses"
def __unicode__(self):
return "%s" % self.code
class Profile(models.Model):
user=models.ForeignKey(User, unique=True)
course=models.ForeignKey('usermanager.Course')
created = models.DateTimeField(auto_now_add=True)
updated_local = models.DateTimeField(blank=True, null=True)
def getCourse(self):
return "%s" %self.course
def save(self,*args,**kwargs):
self.updated_local = datetime.now()
super(Profile, self).save(*args,**kwargs)
def __unicode__(self):
return "Profile: %s" %self.user
Finally, remember to enable registration in installed apps before running
python manage.py syncdb
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'django.contrib.admindocs',
'registration',
)
Monday, 22 July 2013
Quick and dirty multiply raw file conversion
Multi-raw2dng-converter
I asume that you know all about installiation and usage of Magic Lanters raw video functionality.
If you like me find your self with many raw files, using raw2dng manually can be pain in a**. Here you have python 3.x script working and tested on Windows 8. Given the argument -d "file directory" it will look for any subfolders there and for each raw file in subfolder will create new folder and will run raw2dng on that file. The resulting dng will end up in folder named "ra_file_name" without RAW. The script utilizes as many new processes as there cores in CPU.
Note that this script is just quick and dirty way to fix my problem. I hope it will be useful for other as well. Feel free to modify and extend.
Usage:
Output:
Script:
Note that this script is just quick and dirty way to fix my problem. I hope it will be useful for other as well. Feel free to modify and extend.
Usage:
D:\dev\python multiConverter.py -d "F:\Images\2013\0722"
Output:
Successfully processed: F:\Images\2013\0722\1\M17-2243.RAW
Script:
#!/usr/bin/python
#searches for raw files and converts then into a directory with the
#same name as file
import glob
import sys, getopt
import os, multiprocessing, queue, subprocess
from threading import Thread, Lock
FILE = 0
DIR = 1
RAW2DNG = r"C:path\to\raw2dng.exe"
def optionsGet(argv):
inputdir = ""
try:
opts, args = getopt.getopt(argv,"hd:",["ddir="])
except getopt.GetoptError:
print('multiconverter.py -d ')
sys.exit(2)
for opt, arg in opts:
if opt == "-h":
print("multiconverter.py -d ")
sys.exit()
elif opt in ("-d", "--ddirectory"):
inputdir = arg
return inputdir
def getCPUs():
# Windows
try:
res = int(os.environ['NUMBER_OF_PROCESSORS'])
if res > 0:
return res
except (KeyError, ValueError):
pass
def createFolder(name):
pass
def getFileNames(name):
return glob.glob(name + "\*.RAW")
def getsubdirs(inputdir):
file_list = []
dirs=os.listdir(r'%s' %inputdir)
for d in dirs:
tmp = r'%s\%s' %(inputdir,d)
file_list.append(tmp)
return file_list
def createJobs(dir_list, q):
for d in dir_list:
files = getFileNames(d)
for f in files:
q.put((f,d))
def deployWorkers(file_list, l, num_workers, func):
jobs = multiprocessing.Queue()
createJobs(file_list, jobs)
workers = []
for i in range(num_workers):
jobs.put(None)
tmp = multiprocessing.Process(target=func, args=(jobs,))
tmp.start()
workers.append(tmp)
for worker in workers:
worker.join()
def raw2dngWorker(queue):
while True:
job = queue.get()
if job == None:
break
else:
#enter right dir
os.chdir(job[DIR])
#create folder
folder = job[FILE].split(".")[0]
os.makedirs(folder)
#change dir
os.chdir(folder)
proc = subprocess.Popen([RAW2DNG, job[FILE]] ,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, )
stdout_value, stderr_value = proc.communicate()
if not stderr_value:
print("Successfully processed: %s" %job[FILE])
else:
print("ERROR %s " %stderr_value)
if __name__ == "__main__":
inputdir = optionsGet(sys.argv[1:])
cores = getCPUs()
l = Lock()
file_list = getsubdirs(inputdir)
#start cores = workes
deployWorkers(file_list, l, cores, raw2dngWorker)
Cheers
Friday, 24 August 2012
Extending NS3 with your module and extra libraries
I have been working on custom module in ns3 for some time now. Due to many changes in NS3, like bug fixes, extensions, improvements, I decided to move to latest version.
This decision consumed couple of days and several gray hair, due to lack of documentation. The biggest difference for custom module developer is the new waf build system and thus how build works.
Reading http://www.nsnam.org/wiki/index.php/HOWTO_use_ns-3_with_other_libraries it seems very simple to add additional libraries, however the tutorial is not valid for module. Because the suggested build steps will only link the individual files with external libraries and NOT the module. The flags are only passed when compiling indivirual object, the bug (?) is reported.
So here is how I managed to solve it
First, add configuration in your wafscript script
Cheers
This decision consumed couple of days and several gray hair, due to lack of documentation. The biggest difference for custom module developer is the new waf build system and thus how build works.
Reading http://www.nsnam.org/wiki/index.php/HOWTO_use_ns-3_with_other_libraries it seems very simple to add additional libraries, however the tutorial is not valid for module. Because the suggested build steps will only link the individual files with external libraries and NOT the module. The flags are only passed when compiling indivirual object, the bug (?) is reported.
So here is how I managed to solve it
First, add configuration in your wafscript script
def configure(conf):
conf.env['xercersc'] = conf.check(mandatory=True, lib='xerces-c', uselib_store='XERCES')
conf.env['ldl'] = conf.check(mandatory=True, lib='dl', uselib_store='LDL')
make sure you change naming to your libs, note also the name of library, you have to omit "lib", "l" and only go by the name. Having mandatory=True will abort the compilation if waf can not find the library.
Second and last
def build(bld):
#......
#...... code omited
#......
module.use.append("XERCES")
module.use.append("LDL")
#......
#...... the rest of build code
Delete build directory run
./waf configure && ./waf buildIf you still having problems with linking it is very useful to run
./waf --no-task-lines -vIn that case after each build step waf will output runner were the compiler and all passed flags are visible. From there you can continue bug hunt :)
Cheers
Friday, 10 August 2012
TinyOS on Ubuntu 12.04 update error, the fix
TinyOS released the update to tinysos-tools package. However, if updating from GUI of update manager you will get an error
The action would require the installation of packages from not authenticated sources.
And update will be aborted. To fix it, simply open terminal and run
The action would require the installation of packages from not authenticated sources.
And update will be aborted. To fix it, simply open terminal and run
sudo apt-get update sudo apt-get upgradeYou will get two warning, proceed by answering Y and you are done!
Tuesday, 7 August 2012
Install and run NS3 on Amazons EC2
This is simple step-by step on how to run NS3 on Amazon cloud. If you skip to 3 you can use same script on any other machine using Ubuntu.
This script will install needed packages, download ns3, make standard configuration, build ns-3-dev, and will run test.
Assuming you have Amazon account.
Cheers :)
This script will install needed packages, download ns3, make standard configuration, build ns-3-dev, and will run test.
Assuming you have Amazon account.
- Create Ubuntu 12.04 image
- Log in to it
- Create file installns3.sh
- Copy following code into it:
- Save file and execute it.
- It will take a while, I was using medium instance which took: ~34 min.
vi installns3.sh i
#!/bin/bash
#original timer was published in
#http://www.linuxjournal.com/
#http://tiny.cc/en2niw
#by Mitch Frazier
function timer()
{
if [[ $# -eq 0 ]]; then
echo $(date '+%s')
else
local stime=$1
etime=$(date '+%s')
if [[ -z "$stime" ]]; then stime=$etime; fi
dt=$((etime - stime))
ds=$((dt % 60))
dm=$(((dt / 60) % 60))
dh=$((dt / 3600))
printf '%d:%02d:%02d' $dh $dm $ds
fi
}
tmr=$(timer)
INSTALL_DIR="/home/ubuntu/dev/ns3"
#files to install
APPS="gcc g++ python python-dev mercurial bzr gdb valgrind gsl-bin \
libgsl0-dev libgsl0ldbl flex bison libfl-dev tcpdump sqlite sqlite3 \
libsqlite3-dev libxml2 libxml2-dev libgtk2.0-0 libgtk2.0-dev vtun \
lxc uncrustify doxygen graphviz imagemagick texlive texlive-extra-utils \
texlive-latex-extra python-sphinx dia python-pygraphviz python-kiwi \
python-pygoocanvas libgoocanvas-dev libboost-signals-dev \
libboost-filesystem-dev openmpi-bin libopenmpi-dev openmpi-doc"
# update repos
RETVAL=$(sudo apt-get update)
if [ $? -ne 0 ]; then
echo "Unable to update, reason: $?"
echo $RETVAL
exit 1
else
echo "Successfully updated app repostitory"
fi
#function to handle instaliation
function make_install(){
if [ $# == 0 ]; then
echo "must give at least one argument"
exit 1
fi
for app in $*
do
#we do not care is packet is installed it is success
RETVAL=$(sudo apt-get install -y $app 2>&1 >/dev/null)
if [ $? -ne 0 ]; then
echo "Failure: can't install $app reson: $?"
echo $RETVAL
echo "Skipping package $app"
else
echo "Succesfully installed $app"
fi
done
}
#create directory
if [ ! -d "$INSTALL_DIR" ]; then
echo "Creating $INSTALL_DIR"
RET=$(mkdir -p $INSTALL_DIR 2>&1 >/dev/null)
if [ $? -ne 0 ]; then
echo "Can not create directory $INSTALL_DIR. Reason: $?"
echo $RET
exit 1
else
echo "Succesfully created directory $INSTALL_DIR"
fi
fi
#check if port is open
#install apps
make_install $APPS
cd $INSTALL_DIR
echo "Cloning repo"
RET=$(hg clone http://code.nsnam.org/ns-3-allinone)
if [ $? -ne 0 ]; then
echo "Could not clone ns-3-allinone. REASON: $?"
echo $RET
exit 1
else
echo "Cloning was successfull"
fi
cd "ns-3-allinone"
echo "Downloading ns3-dev"
chmod +x download.py
./download.py -n ns-3-dev
cd "ns-3-dev"
echo "Building standart ns3"
./waf configure --enable-tests
./waf build
echo "Running test"
chmod +x test.py
./test.py
printf 'Elapsed time: %s\n' $(timer $tmr)
echo "Thank you! Enjoy NS3"
#hit esc :wq chmod +x installns3.sh ./installns3.sh #go grab coffee
Cheers :)
Labels:
Amazon,
aws,
EC2,
how-to,
install ns-3,
ns-3,
NS3,
simulations,
Ubuntu
Monday, 6 August 2012
TOSSIM simulations on Amazon AWS
There can be many reasons why you want to run your TOSSIM simulations on cloud.
What ever reason is here is how-to guide for running both release and svn version of TinyOS simulator TOSSIM, one assumption is that you have AWS account.
- Share same apps and environment with your coworkers.
- Give access to students.
- Run gi-norm-ous simulation.
- etc
What ever reason is here is how-to guide for running both release and svn version of TinyOS simulator TOSSIM, one assumption is that you have AWS account.
- Create EBS volume.
- Create EC2 instance and start it (it is enough to have ssh port open), type does not matter since you can change it later. The only assumption that you run Ubuntu 12.04 64 bit version.
- Log in to the instance
- Create and edit source file
- Install main release of TinyOS
- Install svn release of TinyOS, the directory root is of your chois, I just like keep things organised
- Fix .bashrc
- Fix JNI
- Install build tools
- Fix python version
- Test installiation
- Create and run simulation
sudo vi /etc/apt/sources.list.d/tinyos.list #in vi paste deb http://tinyos.stanford.edu/tinyos/dists/ubuntu natty main #hit esc and :wq
sudo apt-get update && sudo apt-get install -y --force-yes tinyos-2.1.1 #fix ownership sudo chown -R ubuntu:ubuntu /opt/tinyos-2.1.1With the -y --force-yes following packages will be installed:
Setting up libasound2 (1.0.25-1ubuntu10.1) ... Setting up libasyncns0 (0.8-4) ... Setting up libatk1.0-data (2.4.0-0ubuntu1) ... Setting up libatk1.0-0 (2.4.0-0ubuntu1) ... Setting up libgtk2.0-common (2.24.10-0ubuntu6) ... Setting up ttf-dejavu-core (2.33-2ubuntu1) ... Setting up fontconfig-config (2.8.0-3ubuntu9) ... Setting up libfontconfig1 (2.8.0-3ubuntu9) ... Setting up libpixman-1-0 (0.24.4-1) ... Setting up libxcb-render0 (1.8.1-1) ... Setting up libxcb-shm0 (1.8.1-1) ... Setting up libxrender1 (1:0.9.6-2build1) ... Setting up libcairo2 (1.10.2-6.1ubuntu3) ... Setting up libavahi-common-data (0.6.30-5ubuntu2) ... Setting up libavahi-common3 (0.6.30-5ubuntu2) ... Setting up libavahi-client3 (0.6.30-5ubuntu2) ... Setting up libcups2 (1.5.3-0ubuntu2) ... Setting up libjpeg-turbo8 (1.1.90+svn733-0ubuntu4.1) ... Setting up libjpeg8 (8c-2ubuntu7) ... Setting up libjasper1 (1.900.1-13) ... Setting up libtiff4 (3.9.5-2ubuntu1.2) ... Setting up libgdk-pixbuf2.0-common (2.26.1-1) ... Setting up libgdk-pixbuf2.0-0 (2.26.1-1) ... Setting up libthai-data (0.1.16-3) ... Setting up libdatrie1 (0.2.5-3) ... Setting up libthai0 (0.1.16-3) ... Setting up libxft2 (2.2.0-3ubuntu2) ... Setting up fontconfig (2.8.0-3ubuntu9) ... Cleaning up old fontconfig caches... done. Regenerating fonts cache... done. Setting up libpango1.0-0 (1.30.0-0ubuntu3.1) ... Setting up libxcomposite1 (1:0.4.3-2build1) ... Setting up libxfixes3 (1:5.0-4ubuntu4) ... Setting up libxcursor1 (1:1.1.12-1) ... Setting up libxdamage1 (1:1.1.3-2build1) ... Setting up libxi6 (2:1.6.0-0ubuntu2) ... Setting up libxinerama1 (2:1.1.1-3build1) ... Setting up libxrandr2 (2:1.3.2-2) ... Setting up shared-mime-info (1.0-0ubuntu4.1) ... Setting up libgtk2.0-0 (2.24.10-0ubuntu6) ... Setting up libnspr4 (4.8.9-1ubuntu2) ... Setting up libnss3 (3.13.1.with.ckbi.1.88-1ubuntu6) ... Setting up libnss3-1d (3.13.1.with.ckbi.1.88-1ubuntu6) ... Setting up tzdata-java (2012b-1) ... Setting up java-common (0.43ubuntu2) ... Setting up libgif4 (4.1.6-9ubuntu1) ... Setting up libjson0 (0.9-1ubuntu1) ... Setting up libogg0 (1.2.2~dfsg-1ubuntu1) ... Setting up libflac8 (1.2.1-6) ... Setting up libvorbis0a (1.3.2-1ubuntu3) ... Setting up libvorbisenc2 (1.3.2-1ubuntu3) ... Setting up libsndfile1 (1.0.25-4) ... Setting up libpulse0 (1:1.1-0ubuntu15.1) ... Setting up x11-common (1:7.6+12ubuntu1) ... Setting up libxtst6 (2:1.2.0-4) ... Setting up libgomp1 (4.6.3-1ubuntu5) ... Setting up libice6 (2:1.0.7-2build1) ... Setting up libmpfr4 (3.1.0-3ubuntu2) ... Setting up libquadmath0 (4.6.3-1ubuntu5) ... Setting up libsm6 (2:1.2.0-2build1) ... Setting up libxt6 (1:1.1.1-2build1) ... Setting up libxmu6 (2:1.1.0-3) ... Setting up libxpm4 (1:3.5.9-4) ... Setting up libxaw7 (2:1.0.9-3ubuntu1) ... Setting up libgd2-noxpm (2.0.36~rc1~dfsg-6ubuntu2) ... Setting up libmpc2 (0.9-4) ... Setting up tinyos-base (2.1-20080806) ... Setting up avr-tinyos-base (2.1-20080806) ... Setting up avr-binutils-tinyos (2.17-20080812) ... Setting up avr-gcc-tinyos (4.1.2-20080812) ... Setting up avr-libc-tinyos (1.4.7-20080812) ... Setting up avrdude-tinyos (5.4-20080812) ... Setting up avr-tinyos (2.1-20080806) ... Setting up avr-optional-tinyos (2.1-20090326) ... Setting up binutils (2.22-6ubuntu1) ... Setting up cpp-4.6 (4.6.3-1ubuntu5) ... Setting up cpp (4:4.6.3-1ubuntu5) ... Setting up libc-dev-bin (2.15-0ubuntu10) ... Setting up linux-libc-dev (3.2.0-27.43) ... Setting up libc6-dev (2.15-0ubuntu10) ... Setting up nesc (1.3.3-20110821) ... Setting up tinyos-tools (1.4.0-20100326) ... Setting up deputy-tinyos (1.1-20080807) ... Setting up fonts-liberation (1.07.0-2ubuntu0.1) ... Setting up gcc-4.6 (4.6.3-1ubuntu5) ... Setting up gcc (4:4.6.3-1ubuntu5) ... Setting up libcdt4 (2.26.3-10ubuntu1) ... Setting up libcgraph5 (2.26.3-10ubuntu1) ... Setting up libgraph4 (2.26.3-10ubuntu1) ... Setting up libpathplan4 (2.26.3-10ubuntu1) ... Setting up libgvc5 (2.26.3-10ubuntu1) ... Setting up libgvpr1 (2.26.3-10ubuntu1) ... Setting up graphviz (2.26.3-10ubuntu1) ... Setting up hicolor-icon-theme (0.12-1ubuntu2) ... Setting up libgtk2.0-bin (2.24.10-0ubuntu6) ... Setting up xorg-sgml-doctools (1:1.10-1) ... Setting up x11proto-core-dev (7.0.22-1) ... Setting up libice-dev (2:1.0.7-2build1) ... Setting up libpthread-stubs0 (0.3-3) ... Setting up libpthread-stubs0-dev (0.3-3) ... Setting up libsm-dev (2:1.2.0-2build1) ... Setting up libxau-dev (1:1.0.6-4) ... Setting up libxdmcp-dev (1:1.1.0-4) ... Setting up x11proto-input-dev (2.1.99.6-1) ... Setting up x11proto-kb-dev (1.0.5-2) ... Setting up xtrans-dev (1.2.6-2) ... Setting up libxcb1-dev (1.8.1-1) ... Setting up libx11-dev (2:1.4.99.1-0ubuntu2) ... Setting up libx11-doc (2:1.4.99.1-0ubuntu2) ... Setting up libxt-dev (1:1.1.1-2build1) ... Setting up manpages-dev (3.35-0.1ubuntu1) ... Setting up msp430-binutils-tinyos (2.21.1-20110821) ... Setting up msp430-gcc-tinyos (4.5.3-20110821) ... Setting up msp430-libc-tinyos (20110612-20110821) ... Setting up msp430mcu-tinyos (20110613-20110821) ... Setting up msp430-tinyos (20110821) ... Setting up tinyos-required-msp430 (2.1-20090326) ... Setting up tinyos-required-avr (2.1-20090326) ... Setting up tinyos-required-all (2.1-20090326) ... Setting up tinyos-2.1.1 (2.1.1-20100401) ... Setting up ttf-dejavu-extra (2.33-2ubuntu1) ... Setting up ttf-liberation (1.07.0-2ubuntu0.1) ... Setting up icedtea-netx-common (1.2-2ubuntu1.1) ... Setting up openjdk-6-jre-headless (6b24-1.11.3-1ubuntu0.12.04.1) ...
sudo apt-get install subversion mkdir /home/your_user/dev cd dev mkdir tiny-os-svn #checkout the trunk version svn checkout http://tinyos-main.googlecode.com/svn/trunk/ tinyos-main-read-only
vi .bashrc i #paste TOSROOT_BASE="/opt/tinyos-2.1.1" TOSROOT_SVN="/home/ubuntu/dev/tiny-os-svn/trunk" #TOSROOT=$TOSROOT_SVN #swap TOSROOT to change to different version of TinyOS TOSROOT=$TOSROOT_BASE TOSDIR="$TOSROOT/tos" CLASSPATH=.:$TOSROOT/support/sdk/java:$TOSROOT/support/sdk/java/tinyos.jar:$CLASSPATH MAKERULES="$TOSROOT/support/make/Makerules" PYTHONPATH=$PYTHONPATH:$TOSROOT/support/sdk/python export TOSROOT export TOSDIR export CLASSPATH export MAKERULES export PYTHONPATH #reload bash source /home/ubuntu/.bashrc
sudo tos-install-jni
sudo apt-get install build-essential python python-dev gdb
vi /opt/tinyos-2.1.1/support/make/sim.extra
i
#change PYTHON_VERSION=2.5 to
PYTHON_VERSION ?= $(shell python --version 2>&1 | sed 's/Python 2\.\([0-9]\)\.[0-9]+\{0,1\}/2.\1/')
cd dev/tiny-os-svn/trunk/apps/Blink make micaz sim #should end with *** Successfully built micaz TOSSIM library.
cd /opt/tinyos-2.1.1/apps/RadioCountToLeds make micaz simCreate topo.txt
0 2 -66.0 2 0 -67.0 1 2 -54.0 2 1 -55.0 1 3 -60.0 3 1 -60.0 2 3 -64.0 3 2 -64.0Create python packet.py (this is edited and fixed version of original packet.py)
import sys
from TOSSIM import *
from RadioCountMsg import *
t = Tossim([])
m = t.mac();
r = t.radio();
t.addChannel("RadioCountToLedsC", sys.stdout)
t.addChannel("LedsC", sys.stdout)
for i in range(0, 2):
m = t.getNode(i);
m.bootAtTime((31 + t.ticksPerSecond() / 10) * i + 1)
f = open("topo.txt", "r")
lines = f.readlines()
for line in lines:
s = line.split()
if (len(s) > 0):
if (s[0] == "gain"):
r.add(int(s[1]), int(s[2]), float(s[3]))
noise = open("/opt/tinyos-2.1.1/tos/lib/tossim/noise/meyer-heavy.txt", "r")
lines = noise.readlines()
for line in lines:
st = line.strip()
if (st != ""):
val = int(st)
for i in range(0, 2):
t.getNode(i).addNoiseTraceReading(val)
for i in range(0, 60):
t.runNextEvent()
msg = RadioCountMsg()
msg.set_counter(7)
pkt = t.newPacket()
pkt.setData(msg.data)
pkt.setType(msg.get_amType())
pkt.setDestination(0)
print "Delivering %s to 0 at %s" %(str(msg),str(t.time() + 3))
pkt.deliver(0, t.time() + 3)
for i in range(0, 20):
t.runNextEvent()
Run in sequence
python packet.py
- Lots of pretty output. Done!
- For more info on simulations see http://docs.tinyos.net/tinywiki/index.php/TOSSIM.
- Remember to stop your instance when you done!
- Happy WSN simulations!
Labels:
Amazon,
aws,
cloud,
how-to,
simulations,
svn export sub-folder,
TinyOS,
TOSSIM,
tutorial,
Ubuntu,
WSN
Subscribe to:
Posts (Atom)