function call at each source code
line under investigation.
Are there any other (simple) ways of achieving this ?
(btw the whole program is running as an graphical (wxPython) application)
thanks,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
Steve Howell wrote:
> --- stef <[EMAIL PROTECTED]> wrote:
>
>> doing a simulation of another language (JAL),
>> I translate the other language into Python code,
>> then I execute this converted Python code.
>> [...]
>> (btw the whole program is running
Diez B. Roggisch wrote:
> stef wrote:
>
>
>> hello,
>>
>> doing a simulation of another language (JAL),
>> I translate the other language into Python code,
>> then I execute this converted Python code.
>>
>> Now I need todo some checks and gi
360 or 400) are just mathematical
scaling factors,
like kilo, mega etc.
If a wheel is turning around at
2*pi*100 [rad /sec]
does something physical change is we leave the radian out
the wheeel is turning at
100 [1/sec]
No it's now called frequency, and has just some different scaling.
SQRT of "rad/sec" ?
Yes, in electronics the noise density is often expressed in [nV/SQRT(Hz)]
cheers,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
hello
I can find all kind of procedures to convert an array to a bitmap
(wxPython, PIL),
but I can't find the reverse,
either
- convert a bitmap to an array
or
- read a bitmap file to an array
thanks,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
Stefan Sonnenberg-Carstens wrote:
> stef schrieb:
>> hello
>>
>> I can find all kind of procedures to convert an array to a bitmap
>> (wxPython, PIL),
>> but I can't find the reverse,
>> either
>>- convert a bitmap to an array
>> or
>
Diez B. Roggisch wrote:
> stef wrote:
>
>
>> hello
>>
>> I can find all kind of procedures to convert an array to a bitmap
>> (wxPython, PIL),
>> but I can't find the reverse,
>> either
>>- convert a bitmap to an array
>> or
>
Giuseppe Di Martino wrote:
> Il Tue, 05 Jun 2007 23:57:15 +0200, Stef Mientki ha scritto:
>
>
>> hello,
>>
>> after cleaning up a PC, Python can't find any libraries anymore.
>> But happily I've still one PC, where Python is running perfect.
>>
Thorsten Kampe wrote:
> * Stef Mientki (Tue, 05 Jun 2007 23:57:15 +0200)
>
>> after cleaning up a PC,
>>
>
> Uou purposely deleted things you had no clue about?!
>
Yes,
but you should have seen what a "professional" package like LabView /
L
Giuseppe Di Martino wrote:
> Il Wed, 06 Jun 2007 12:01:13 +0200, stef ha scritto:
>
>
>>>
>>>
>> I ran your program but it didn't solve the problem (running Python,
>> embedded in Delphi).
>> I'm beginning to get the feel
.
thanks,
Stef mientki
--
http://mail.python.org/mailman/listinfo/python-list
ested in the overall demo setup,
really beautiful and powerful, just one thing missing (user configurable
tree).
And if you can copy it,
I'm allowed to do so also ;-)
thanks,
Stef
>
> -- Ed Leafe
> -- http://leafe.com
> -- http://dabodev.com
>
>
--
http://mail.python.org/mailman/listinfo/python-list
Gabriel Genellina wrote:
> En Tue, 19 Jun 2007 19:40:10 -0300, Steven Bethard
> <[EMAIL PROTECTED]> escribió:
>
>> Stef Mientki wrote:
>>> Evan Klitzke wrote:
>>>> On 6/19/07, Stef Mientki <[EMAIL PROTECTED]> wrote:
>>>>>
>>&
Stefan Behnel wrote:
> Stef Mientki wrote:
>
>> I need to search a piece of text and make all words that are equal
>> (except their case) also equal in their case, based on the first
>> occurrence.
>> So I'm using a dictionary to store names and attributes of
Carsten Haese wrote:
> On Wed, 2007-06-20 at 11:14 +0200, stef wrote:
>
>> Stefan Behnel wrote:
>> Serial_HW_Read = the name of a function
>> "F" = the type of that function (procedure / function / pseudo variable
>> / interrupt /..)
>> "++&q
-files without
reshuffling ?
thanks,
Stef Mientki
Kamer van Koophandel - handelsregister 41055629 / Netherlands Chamber of
Commerce - trade register 41055629
--
http://mail.python.org/mailman/listinfo/python-list
Marc 'BlackJack' Rintsch wrote:
> In <[EMAIL PROTECTED]>, stef wrote:
>
>
>> I just used configparser for the first time and discovered that it
>> shuffled all my sections, and the contents of the sections too.
>>
>
> The data is stored in
Bruno Desthuilliers wrote:
> Stef Mientki a écrit :
>> How can I list a type of an object instance ?
>>
>> I tried:
>>
>> class tLED (tDevice):
>
>
> Do yourself (and the world) a favour and give up hungarian notation...
> This should be:
>
>
Antoon Pardon wrote:
> On 2007-04-25, Stef Mientki <[EMAIL PROTECTED]> wrote:
>
>> hello,
>>
>>
>> As part of a procedure I've a number sequences like this:
>>
>>
>> if Print_Info: print Datafile.readline()
>> e
ew package.
Sorry for the long post, about "nothing" for non-windows users ;-)
thanks,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
from the string ?
thanks,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
> or (untested):
>
> if Print_Info:
> def printOrNot(arg):
> print arg
> else:
> def printOrNot(arg):
> pass
>
> printOrNot(Datafile.readline())
>
>
thanks for the creative solution, and indeed it does work ;-)
cheers,
Stef Mientk
>
> line = line.rstrip("\r\n") should take care of it. If you leave out
> the parameter, it will strip out all whitespace at the end of the
> line, which is what I do in most cases.
thanks for the solution Michael,
cheers,
Stef
--
http://mail.python.org/mailman/listinfo/python-list
items='3'
...
>>>
>>> v
['123', '345', '', '0.3']
>>>
thanks,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
hello Sean,
thanks very much for the explanation and solution.
cheers,
Stef Mientki
[EMAIL PROTECTED] wrote:
> On May 16, 1:41 am, stef <[EMAIL PROTECTED]> wrote:
>
>> hello,
>>
>> can someone tell me why the following iteration doesn't work,
>> and
&
facilities,
both to drag and drop normal button,
but also to drag and drop some dynamically created objects.
Just like a CAD program, but far more simpler.
Does anyone has an example how to drag & drop components with wxPython ?
thanks,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
another way, without using the dummy index, to achieve the same
results ?
thanks,
Stef Mientki
class cpu_ports(object):
def __init__(self, value=0):
self._d = value
def __setitem__(self, index, value):
print 'vv'
self._d = value
def __getitem__(self
Bruno Desthuilliers wrote:
> stef a écrit :
>> thanks Guys for your information,
>>
>> indeed you're all quit right,
>> but I think I've not correctly described my problem :-(
>>
>> I need to have 2 (or more) names, that references the same instance
st years mostly Delphi, JAL, MatLab)
> I do think
> newbies/intermediates/advanceds all have different
> needs.
>
agreed.
cheers,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
d aiw?? or something
like that and crashes
(on fast PC's you actually just see a dos box flashing).
Editing the wx.pth file solved the problem.
cheers,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
John Nagle wrote:
> Diez B. Roggisch wrote:
>> Stef Mientki schrieb:
>>
>>> hello,
>>>
>>> after 4 months playing around with Python,
>>> and I still have troubles with egg files.
>>> Sometimes it works, sometimes it doesn't.
&g
t
> worth using for the convenience it offers.
>
> Do other Python programmers feel this lack? Is this worth a PEP?
>
>
Yes I think it's really useful,
(or at least I'm used to it in other languages ;-)
If you're going to extend the dictionary,
there's one
[EMAIL PROTECTED] wrote:
> Hi,
>
> Does anyone know if the wxPython mailing list is having issues? I
>
Yes the server has hardware problems,
Robin Dunn (moderator), is informed about it.
cheers,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
> I highly recommend the wxPython mailing list. Right now it is down
> (see their website),
its'up again.
--
http://mail.python.org/mailman/listinfo/python-list
this question on the scipy newsgroup
SciPy Users List <[EMAIL PROTECTED]>
cheers,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
than in Fortran.
I did some comparison between MatLab and Python (Scipy) for real-time
analysis,
and for all my cases Pyhton van 3 .. 7 times faster than MatLab.
So I'ld suggest to start with downloading the Enthought edition of Python,
and you can judge for yourself within 10 minutes,
if it&
hello,
is there a Python library for easy reading and writing windows ini-files ?
thanks,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
Laurent Pointal wrote:
> stef a écrit :
>
>> hello,
>>
>> is there a Python library for easy reading and writing windows ini-files ?
>>
>
> http://docs.python.org/lib/module-ConfigParser.html
>
> A+
>
> Laurent.
>
thanks Laurent,
tha
Wildemar Wildenburger wrote:
> stef mientki wrote:
>> Wildemar Wildenburger wrote:
>>> Bruno Desthuilliers wrote:
>>>
>>>> OTHO, simple math-illeterate programmers like me will have hard
>>>> time maintaining such a code.
>>>>
extimporter.pyc", line 78, in load_module
File "configuration.pyc", line 149, in ?
Exception: Unable to create config directory: 'G:\\.pype'
I don't have a G-drive ;-)
cheers,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
;, line 178, in
ensureMinimal
raise VersionError("wxversion.ensureMinimal() must be called before
wxPython is imported")
VersionError: wxversion.ensureMinimal() must be called before wxPython
is imported
> cheers,
> Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
thebjorn wrote:
> On Sep 25, 12:46 pm, stef <[EMAIL PROTECTED]> wrote:
>
>> Another problem,
>> I tried to run PyPE in my "old IDE",
>>
>
> instead of double-clicking on the PyPE.exe file? Why?
>
to get the traceback.
cheers,
Stef
--
http://mail.python.org/mailman/listinfo/python-list
thebjorn wrote:
> On Sep 25, 12:37 pm, stef <[EMAIL PROTECTED]> wrote:
>
>> Josiah Carlson wrote:
>>
>>> === What is PyPE? ===
>>> PyPE (Python Programmers' Editor) was written in order to offer a
>>> lightweight but powerful editor f
Paul Hankin wrote:
> On Oct 19, 12:24 am, stef mientki <[EMAIL PROTECTED]> wrote:
>
>> I generate dynamically a sequence of values,
>> but this "sequence" could also have length 1 or even length 0.
>>
>> So I get some line in the fo
beautiful things in Python,
but tell them that they are going to loose all their globals ???
cheers,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
re are a couple of fairly general modules that I'm missing in Python:
- SimuLink
- (PowerSim)
cheers,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
rwise I don't kno what you mean.
cheers,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
ot an easy task I guess,
but it would be nice to have some voting system,
(maybe only to allow voting when you have compared at least 2 programs)
that would represent the current state,
and in which new programs would have a fair chance to start.
cheers,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
S[4] )
execute ( mylist )
thanks,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
ure
chunk_plot (S[1], S[4])
chunk_plot ( ( S[1], S[4] ) )
my_action_list = ( S[1], S[2] )
chunk_plot ( my_action_list )
And sorry, no need for kwargs for now ;-)
thanks guys,
Stef
--
http://mail.python.org/mailman/listinfo/python-list
Eugene Antimirov wrote:
> stef wrote:
>
>> # method 2
>> def chunk_plot(self, list):
>> for i in range ( len(list) ):
>> do something
>
>
> And one note more. Just to be more pythonic you shouldn't use form
> ran
I would love that,
but please tell me how (I need an integer counter for something else too):
def chunk_plot(*args):
if len(args) == 1: list = args[0]
else: list = args
color = ['g','r','b','y','m']
plot ( list[0], color[0])
hold (True)
for i in range
f
code selected by the user
- get rid of Apache and SQLite, too complicated for newbies
keep on the good work,
cheers,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
kly and easily writing cross-platform
> applications.
another way of reaching the same goal,
is to use a wrapper that supports the different backends.
As I found wxPython much too difficult (I was a Delphi guy),
I started directly with a wrapper when I started using wxPython a few years ago.
In the meanw
hello,
I would like to have a autocompletion / help /snippet system like Dasher :
http://www.inference.phy.cam.ac.uk/dasher/
anyone seen such a component ?
thanks,
Stef
--
http://mail.python.org/mailman/listinfo/python-list
On 08-05-2011 01:28, Dan Stromberg wrote:
>
> On Sat, May 7, 2011 at 3:40 PM, Stef Mientki <mailto:stef.mien...@gmail.com>> wrote:
>
> hello,
>
> I would like to have a autocompletion / help /snippet system like Dasher :
>
> http://www.inference.phy
utch) string
- "20-5-11" : short year notation
- "20-05-2011" : long year notation
- "2009-09-24 10:12:24" : Access string
- datetime.datetime ( 2011, 1, 15 )
- time.struct_time
- wx.DateTime
- time.time() (through method from_time)
Maybe
hello,
must of us will not use single bits these days,
but at first sight, this looks funny :
>>> a=2
>>> b=6
>>> a and b
6
>>> a & b
2
>>> a or b
2
>>> a | b
6
cheers,
Stef
--
http://mail.python.org/mailman/listinfo/python-list
None, None ]]
>>> B[2][0] = 77
>>> B
[[77, None], [77, None], [77, None]]
which doesn't work as expected.
any suggestions ?
thanks,
Stef
--
http://mail.python.org/mailman/listinfo/python-list
lot of work to do. Any ideas how I should proceed
with this project?
skulpt ?
cheers,
Stef
--
http://mail.python.org/mailman/listinfo/python-list
brary here:
http://code.google.com/p/pylab-works/downloads/detail?name=adb_sl4a_support.py&can=2&q=
cheers,
Stef
--
http://mail.python.org/mailman/listinfo/python-list
rate and evaluate regular expressions,
but can't find it anymore :-(
If someone has links to regex generators/evaluators,
I'ld be much obliged.
cheers.
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
>> #1 What type of file is the file? Is it a movie, image, or text
>> document?
>
> In the Windows world, one simply looks at the file extension (e.g. .gif,
> .avi, .txt, etc.) and hopes that it is correct.
or simply use TRID:
http://mark0.net/soft-trid-e.html
larger and therefor very clumsy to
run line by line in the command line interpreter.
Is there a way to run the initialization code from a script(file) once,
to achieve the same effect ?
thanks,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
es.
thank you guys,
but it's still not quit handy
# initialization file (init1.py)
import time;
xx = 44
# main file was
print xx
x=time.time()
# main file should become
print init1.xx
x=init1.time.time()
so even for the "standard" functions like "time" I'
, then you
> probably don't want to use "from module import *" syntax. In that case,
> you can import just the module, and make assignments into that module's
> namespace. (e.g., init.xx = 3)
>
> If all you care about is getting some "stuff" into your global namespace
> in a convenient and repeatable way, then I think what I showed both above
> and originally is fine.
>
thanks Erik,
I think I'm slowly getting the picture:
always use "import", which is the most unambiguous approach.
Life is sometimes difficult for a MatLab user, see my next post ;-)
Stef
--
http://mail.python.org/mailman/listinfo/python-list
I want to return a "simple" variable from a function,
not using the function result.
Is that in any way possible ??
The code below is from O'Reilly, "Learning Python",
and there seems no way
to return a simple var like "z" in the example below.
Is that
al_IN) + i ]
I can not use a global variable here, because this function should be
called for several signals, each of course with it's own history.
thanks,
Stef
--
http://mail.python.org/mailman/listinfo/python-list
I'll hope to understand that later on !
You can achieve the
> same result without side-effects by returning more than one return value
> from your function.
>
> Hope this helps,
Wow this certainly helps,
thanks very much Carsten!
Why is the obvious sometimes so far away
use an binary (true/false) input,
it also detects rising edges.
Probably a stupid question,
but I still have troubles,
digging to huge amount of information about Python.
thanks,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
functions available, like a simple "mean"
- reducing datatype if it's allowed (booleans of 1 byte)
thanks for all your help,
probably need some more in the future,
cheers,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
ould replace that by
some other great things:
- the very efficient way, comment is turned into help information
- the (at first sight) very easy, but yet quit powerfull OOPs implemetation.
cheers,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
>
> I'm not sure about SciPy,
Yes SciPy allows it too !
but lists in standard Python allow this:
>
>>>> array = [1, 2, 3, 4]
>>>> array[2:5]
> [3, 4]
>
> That's generally a good thing.
>
You're not perhaps by
Mathias Panzenboeck wrote:
> A other great thing: With rpy you have R bindings for python.
forgive my ignorance, what's R, rpy ?
Or is only relevant for Linux users ?
cheers
Stef
> So you have the power of R and the easy syntax and big standard lib of
> python! :)
--
http://m
standards.
Stef
--
http://mail.python.org/mailman/listinfo/python-list
> I think of SAS and R as being like airliners and helicopters --
I like that comparison,...
.. Airplanes are inherent stable,
.. Helicopters are inherent not-stable ;-)
cheers,
Stef
--
http://mail.python.org/mailman/listinfo/python-list
What's the difference between using __init__ and using nothing,
as the examples below.
class cpu:
PC = 4
class cpu:
def __init__:
self.PC = 4
thanks,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
Marc 'BlackJack' Rintsch wrote:
> In <[EMAIL PROTECTED]>, Stef Mientki wrote:
>
>> What's the difference between using __init__ and using nothing,
>> as the examples below.
>>
>> class cpu:
>>PC = 4
>
> This is a *class attribu
es ={
1: ('MOV', function1, ...),
2: ('ADD', function2, ),
3: ('MUL', class3.function3, )
}
def function1
# do something complex
Is this possible ?
thanks,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
efer to it.
>
Yes, I just found that out.
Thanks Gary and Grant,
this principle really works like a charm.
cheers,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
If I call a parameterless function without brackets at the end,
the function is not performed, but ...
I don't get an error message ???
Is this normal behavior ?
thanks,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
> Hope this helps,
>
thanks You all guys,
It's perfectly clear to me now !
cheers,
Stef
--
http://mail.python.org/mailman/listinfo/python-list
an be seen here
http://oase.uci.kun.nl/~mientki/data_www/pic/jalss/jalss.html
thanks again,
for all your fast and very adequate responses !!
cheers,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
__ (self, naam):
self.Name = naam
aap2 = pin2('aap2') # seems completely redundant to me.
print aap2.Name
print 'aap2'
Can this be achieved without redundancy ?
thanks,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
Steven Bethard wrote:
> Stef Mientki wrote:
>> Not sure I wrote the subject line correct,
>> but the examples might explain if not clear
> [snip]
>> class pin2:
>> def __init__ (self, naam):
>> self.Name = naam
>>
>> aap2 = pin2('aap2
;s not allowed to overload a method with an empty
statement.
I could write a nonsense dummy statement, like "A= 3", but isn't there
another way ?
thanks, Stef Mientki
class device:
def execute (self):
print 'execute not yet implemented for', self.Name
cl
e lines "self.GND = self.pin[0]"
I'm also in for other solutions.
thanks,
Stef
class Power_Supply(device):
pinlist = {
0: ('GND', _DIG_OUT, _par2),
1: ('VCC', _DIG_OUT, _par33)
}
def __init__(self):
# store pin-nam
on people,
write these lines),
I think my "pinlist" is much easier.
> for k in self.pin.keys():
> self.__dict__[self.pin[k]['Name']] = self.pin[k]
thanks "rzed" ?,
that is exactly what I was looking for:
self.__dict__[self.pinlist[k][0]] = self.pin[k]
cheers,
Stef
--
http://mail.python.org/mailman/listinfo/python-list
Jussi Salmela wrote:
> Bruno Desthuilliers kirjoitti:
>> Stef Mientki a écrit :
>>> In the example below, "pin" is an object with a number of properties.
>>> Now I want
>>> 1- an easy way to create objects that contains a number of these "pin
Stef Mientki wrote:
> Jussi Salmela wrote:
>> Bruno Desthuilliers kirjoitti:
>>> Stef Mientki a écrit :
>>>> In the example below, "pin" is an object with a number of properties.
>>>> Now I want
>>>> 1- an easy way to create objects
) + cos(y))(x*x)
>
> 42 key presses.
>
> Apart from the extremely minor issue of "namespace pollution", I think
> that speaks for itself.
and now I've only 60 lines on my screen,
so what about
def f(x): y = x*x; return sin(y)+cos(y);
cheers,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
pi/4 radians?
Maybe he meant
sin(x)^2 + cos(x)^2
which is well known demodulation technique if you create two signals 90 degrees
out of phase.
Stef
--
http://mail.python.org/mailman/listinfo/python-list
gle is doing, is done in Python ;-)
I use Python as a replacement for MatLab,
and intend to use it as replacement for Delphi, AutoIt, PHP, VB.
And I'ld love to use it as a replacement for micro controller programming.
The hardest to replace language is Delphi.
And all the work I perform with th
orks ok,
there is the standard "PATH" environment variable,
and indeed there are all the Python Library references.
Please enlighten me.
thanks,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
Hendrik van Rooyen wrote:
> "Stef Mientki" <[EMAIL PROTECTED]> wrote:
>
>> I use Python as a replacement for MatLab,
>> and intend to use it as replacement for Delphi, AutoIt, PHP, VB.
>> And I'ld love to use it as a replacement for micro controll
> d1 = os.path.dirname(__file__)
here I get an error "__file__" is not defined ??
> d2 = os.path.dirname(os.__file__)
here I get a completely different path ??
>
> print d1
> print d2
This seems to work (but I doubt it's always working !! )
print os.getcwd()
so what
Ed Leafe wrote:
> On Jun 8, 2007, at 10:01 AM, stef wrote:
>
>> I'm interested in the overall demo setup,
>> really beautiful and powerful, just one thing missing (user configurable
>> tree).
>>
>> And if you can copy it,
>> I'm allowed t
elif simulation_level == 2:
... do things in another way
elif simulation_level == 3:
... do things in yet another way
thanks,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list
uit simple:
simulation_level = 0
def f1():
print 'f1'
if simulation_level == 2:
def f1():
print 'f2'
f1()
cheers,
Stef Mientki
Francesco Guerrieri wrote:
> If the functions are
> f1, f2, f3 you could go this way:
>
> def Sim
7stud wrote:
> On Jun 10, 2:03 pm, Stef Mientki <[EMAIL PROTECTED]>
> wrote:
>> thanks Francesco and "7stud",
>>
>> The solution with objects is too difficult,
>> because I want to stay very close to the orginal language,
>>
>
> Why wo
1 - 100 of 722 matches
Mail list logo