to make statements for the environment, for the animals, for the
marginalized?
~ Michael
On Sunday, March 13, 2022 3:42:01 PM PDT you wrote:
> To quote Glyph, "I think it would be more helpful to make a statement in
> support of Ukraine specifically. To say “peace” might suggest that Ukraine
like the PSF to come
out and make statements for. Please, just ask.
~ Michael
On Sunday, March 13, 2022 6:14:29 AM PDT you wrote:
> nope...
>
> i could if the python software would have done such statements for all
> the war on earth for decades... but it did'nt
>
>
I read through the thoughtful discussion on GitHub and I wouldn't even imagined
some of the factors, like XP in China, but it seems like the right thing to do,
as people will still have access to py2 and sdl1.
~ Michael
On Saturday, October 9, 2021 12:43:08 AM PDT you wrote:
>
Wow, great work, devs! 🎉🦾
~ Michael
On Sunday, August 22, 2021 3:49:31 AM PDT you wrote:
> 💐💐😉😊💐💐
> ☕ Cheer Up! 🍵
> 🍂 ✨ )) ✨ 🍂
> 🍂┃ (( * ┣┓ 🍂 we have a python3 -m pip install pygame==2.0.2.dev2
> 🍂┃*💗 ┣┛ 🍂
> 🍂┗━━┛ 🍂
> 🎂 For YOU 🍰
> 💐💐😌😊💐💐
s
Hello Michael and welcome to the community :)
I tried your code on my Linux setup: Python 3.8.5, Pygame 2.0.0, SDL 2.0.12,
KDE neon 5.20.04, Mesa DRI Intel HD Graphics 3000...
After adding the missing
WHITE = (255, 255, 255)
and running your code, I didn't notice tearing as I move
Python 3.8.6
Pygame 2.0.0
Xubuntu 20.10
Nvidia 1060 6GB
The following code, when run, causes an issue where the circle starts to
tear as it moves across the screen if I click on the active window. Where I
click seems to matter also, as the tearing can be adjusted by clicking at
various points from
This is a huge achievement! \(^o^)/
Thank you to all the devs! :)
~ Michael
On Wednesday, October 28, 2020 11:10:32 AM PDT you wrote:
> ,--.
> | oo|
> | ~~| o o o o o o o o o o o o o
> |/\/\|
>python3 -m pip install pygame==2.0.0
>
> The 28th o
Wow, amazing work, all around! O_O
*/I'm tired./* Been spending some months on pygame stuff.
That article(novella) I promised several months ago about
contemporary C tools is still unfinished(but probably useful).
http://renesd.blogspot.com/2019/09/post-modern-c-tooling.html[1]
Learnt
, and then from a remote computer, you could
log into the Pi and control the desktop. I think that is more what
you're looking for.
Michael
ion of the screen that allows YUV data to pass through the video buffer. In
other words, they make all the RGB pixels 0,0,0 and overlay a YUV video through
that black "hole". So there's nothing you can capture there.
~ Michael
Hello,
I wondered if this is possible with pyg
Thank you for calling that out as abusive.
~ Michael
> On Mon, Mar 13, 2017 at 5:24 AM, Bork Air
> wrote:
>
> > again, your website looks like shit
> >
> > the original green one had some design
> >
> >
> >
> Speaking of which...
>
ake them!
~ Michael
> Good ideas Michael.
>
> I'll improve the login message to be something like what you mentioned.
> Also, there's plenty of opportunity for wordsmiths to improve the emails as
> well. To perhaps make them more playful and fun. There's a '
versions 1.9.1. Even the line: "Not sure what to download? Read
the Installation [1]Notes” has an 404 link.
~ Michael
> Hey ya,
>
> yep. I've been meaning to improve the messaging there :) You need to
> https://www.pygame.org/confirm first, since you already had an ac
understand how to get going and discover Pygame at their speed, using the OS
that happens to be in front of them. On that last point, I speak for kids who
want to make games and who don’t get a choice of their OS, in contrast to us
adult engineers.
I say, go for it. What do yo
Hello and welcome Jorge!
You can use the following link to create an account:
/http://www.pygame.org/login/new.php?nospamplease=thisisabitweird/[1]
Michael
>
> From https://bitbucket.org/pygame/pygame/issues/290:
>
> > There's a secret signup link - I don't kn
Had no idea that Kivy has Pygame in its framework, runs across all platforms,
uses SDL2 and now Python 3. Very impressive.
~ Michael
> The Kivy library seems to be more complex than Pygame, but has more
> features.It appears to run on OpenGL ES 2. I noticed in the Kivy blog:
>
I’m half tempted to take you up on the offer just for the challenge of it, but
my time isn’t so free either.
Would it be a good idea to post this request on the pygame.org site where
others could find it? There must be someone who’d be happy to do this.
~ Michael
> Lenard committed chan
your code, such as having one draw function and one update function.
*def* draw():
screen.clear()
alien.draw()
This is all Python and Pygame under the hood, but it cleans up the path so it’s
easier for newcomers to understand.
Hope this gives you a different perspective.
~ Michael
> H
ate.”* *”It is intended for
use in education*, so that teachers can teach basic programming without needing
to explain the Pygame API or write an event loop."
Very cool, actually, and may be just what you need.
~ Michael
> Hi folks,
>
> We're introducing Python for 9
re doing great. Ignore the angry comments; there are those like me who have
nothing but appreciation for what you’re doing!
~ Michael
Woohoo!!! We have a new site!!! Thank you, René :)
~ Michael
Yes, very nice! I like how it’s a very minimal set of additions over pygame.
And thinking about it more, I can see how keeping as much of the API the same
will keep the goodwill and momentum for pygame going, especially with the books
that have been written with it in mind.
~ Michael
. Not good. Very slow. Think fast.
Instead, preload all game assets--images and sound--before the main update loop
begins.
Good luck and let us know how it goes!
~ Michael
> Hi!
> I've created a simple 2D graphic program to play the piano thanks to a
> computer keybo
Just a small question, could you import custom pictures for the buttons, so
it looks more customized?
--
View this message in context:
http://pygame-users.25799.x6.nabble.com/GUI-for-pygame-ThorPy-tp1944p1984.html
Sent from the pygame-users mailing list archive at Nabble.com.
So while looking around the internet today, I came across this little gem:
http://www.baumanfamily.com/john/risk.html
The amount of code in it that help is outstanding, and really helps with
learning how to code a board game.
--
View this message in context:
http://pygame-users.25799.x6.nabble
I am not familiar with the names, again, I am a VERY novice coder, have
watched one tutorial, whilst going through the book 'invent with python' as
well.
--
View this message in context:
http://pygame-users.25799.x6.nabble.com/Need-a-lot-of-help-with-virtual-board-game-tp1965p1982.html
Sent fro
No, I am not familiar with that at all.
--
View this message in context:
http://pygame-users.25799.x6.nabble.com/Need-a-lot-of-help-with-virtual-board-game-tp1965p1980.html
Sent from the pygame-users mailing list archive at Nabble.com.
>Create an image of the board.
>Save the countries as coordinates that refer to the centre of
>the country.
>For each country, save a list of countries that are connected.
>When units are in a country, display them at the centre
>coordinate.
Quick question:
For my game I want territories that are different shapes, not tiles, is it
done the same way? or is there another process completely?
--
View this message in context:
http://pygame-users.25799.x6.nabble.com/Need-a-lot-of-help-with-virtual-board-game-tp1965p1973.html
Sent from th
Thanks a ton guys! When I finish the game I am ultimately trying to make (The
first Balkan war) I will post it on these forums :)
--
View this message in context:
http://pygame-users.25799.x6.nabble.com/Need-a-lot-of-help-with-virtual-board-game-tp1965p1972.html
Sent from the pygame-users maili
I actually coded my own pong game, I forgot to add a pause menu though.
However, I still need to know how to code in 'combat' (die rolls,
causalities ETC.)
Movement of troops
and still alll the others listed above.
--
View this message in context:
http://pygame-users.25799.x6.nabble.com/Need-a-
Hello, novice coder here.
I need help coding a board game.
What I need to learn (because I dont know how to do it already):
Combat (die rolls, have troops removed on those die rolls)
An interactive map (Player/players can move the map around to view a
different area, zoom in and out ETC.)
Units m
I looked over the ThorPy examples on your site and it was all very easy to
understand. Kudos!
~ Michael
> Hi Yann,
>
> I made one, too, a couple of years ago. Here it is:
> http://www.burtonsys.com/download/DavesGUI.zip
>
> It sounds like yours is probably more complete
Yes, I too look for the day when we can have a new pygame.org site that we can
serve our community’s needs.
~ Michael
> I refer to Yann Thorimbert's message.
>
> Someone out there should pay a bit more attention to this kind of situation
> where contributors who wa
I can verify that running:
$ python /usr/lib/python2.7/dist-packages/pygame/examples/sound.py
plays without error on my Kubuntu distro (x86_64 Linux kernel 3.19.0-18,
pulseaudio 6.0). Must be a RPi issue?
~ Michael
> Well, this is strange. In
> /usr/lib/python2.7/dist-packages/
I too am very stoked to hear about the pygame1 release and the pygame_sdl2!
This is wonderful!!
~ Michael
On Tue : Apr 7, 2015 3:13:02 PM you wrote:
> pps. yes, I think it would be nice to join forces. Including testing,
> porting, doing missing modules, and re-licensing or rewriting LGP
This is great news, and thank you for sharing this. How do we get this on the
news feed on the main pygame.org site so that there isn’t a perception that
“nothing’s happening” with PyGame?
~ Michael
On Sat : Apr 4, 2015 6:42:36 PM you wrote:
> I mentioned this in passing a few months ago,
I would recommend trying to contact someone via the pygame website
if you already tried that, then, well, IDK what to tell you.
--
View this message in context:
http://pygame-users.25799.x6.nabble.com/PyGame-app-I-d-like-to-add-to-the-web-site-tp1804p1814.html
Sent from the pygame-users mailing
Ok,
Well, I hade python 3.2 installed, and pygame for python 3.2, so I got
python 3.4, and installed pygame via PIP.
That fixed the problem :)
--
View this message in context:
http://pygame-users.25799.x6.nabble.com/invalid-syntax-error-while-trying-to-change-py-to-exe-tp1808p1813.html
Sent fro
Fixed
--
View this message in context:
http://pygame-users.25799.x6.nabble.com/invalid-syntax-error-while-trying-to-change-py-to-exe-tp1808p1810.html
Sent from the pygame-users mailing list archive at Nabble.com.
Yes, a really fun and clever game, it made me smile. I looked through the code
and it was easy to understand. It would be nice to have this among the standard
Pygame example games.
~ Michael
Isn’t Pyglet using OpenGL by default? I’d like to see the next iteration of
Pygame use hardware acceleration by default so that this type of issue goes
away.
~ Michael
On Sun : Mar 8, 2015 2:14:39 AM you wrote:
> Much better, thanks.
>
> The only a bit serious impact on performan
a great learning platform, but
it doesn’t seem like there is a solution here. Still very fiddly on the Mac :(
~ Michael
page an issue for its not being adopted?
Who is in charge of the site?? And what would it take to have a vibrant
community that pygame deserves?
~ Michael
On Fri : Feb 6, 2015 12:03:06 AM you wrote:
> Hi, I would like to register to pygame.org but it was disabled, can someone
> sign
Congratulations!!! I’ve been noticing this on pygame.org for awhile and it says
that a lot you stuck with it and finished your game \o/
~ Michael
/project-Perlin+Noise+Generator-1044-.html[2]
Good luck!
~ Michael
On Fri : Jan 23, 2015 1:27:28 PM you wrote:
> Hello,
>
> I am new to the list. My present project is to try several methods of game
> map
> generation (perlin noise, cellular automatons, etc...) and for now barel
png.
I’d suggest downloading and installing Ubuntu 14.04. It’s so much fun to
develop under Linux, and there’s so many tools that it’s an embarrassment of
riches.
Keep trying!
~ Michael
On Fri : Dec 26, 2014 10:58:01 AM you wrote:
> Hi guys,
>
> I've reworked my game (Time Trek)
would be great if you could get an account on pygame.org so you could post
your game there for discovery and feedback.
Can anyone here help Ted showcase his game on pygame.org?
Michael
On Mon : Dec 15, 2014 4:12:10 PM you wrote:
> Hi guys,
>
> I've been unsuccessful at getting reg
This is the most exciting Pygame news I’ve heard in like 2 years!
I wish others could hear about this via the pygame.org news section. This kind
of breath of fresh air is sorely needed, I think.
~ Michael
On Thu : Dec 4, 2014 10:30:28 PM you wrote:
> On Thu, Dec 4, 2014 at 11:28 AM, P
You can find more information here:
Announcement: http://digitalbytes.net/announcing-splatgl/
Github repository: http://github.com/nikarul/splatgl/
-Michael
Yay! Thank you Jason :)
I'm also looking forward to the new pygame website.
.-.
((`-'
\\
\\
.="""=._))
; '=. "'"
'=="
~ Michael
So can someone connect me with the person or persons who are in charge of the
pygame.org site to get Pygame news posted? I really want to see Pygame get some
love, and I'd be willing to help.
~ Michael
On Wed : May 21, 2014 11:05:19 PM you wrote:
> I'd like to get this piece o
nal wish to see more Pygame news to counter PySDL's
presence. I feel that all the mentioning of PySDL is like an endorsement of
PySDL over Pygame. I want to hear more about Pygame :)
Michael
unsubscribe pygame-users
smime.p7s
Description: S/MIME cryptographic signature
unsubscribe pygame-users
On Fri, Jul 15, 2011 at 5:41 AM, DR0ID wrote:
> **
> On 15.07.2011 13:52, sam.hack...@sent.com wrote:
>
> On Thu, 14 Jul 2011 13:57 -0700, "Michael Carius"
> wrote:
>
> # Python 2.x code
> class MySurface(object):
> def __init__(self, obj
an instance field isn't found the
usual way. So, if you have a MySurface object called "s", this wouldn't
invoke __getattr__:
assert s.__init__
But this would:
assert s.convert
And calling s.convert() would still function as normal, because its self
parameter is actually bound to s._surf.
Hope that helps,
--
Michael
> Well, the idea that you need to
>
> "put it in a class"
> in order to
> "access it in the files that needed it"
>
> is certainly not correct. You could do it that way, however like
> Marius says, that's a very strange usage.
> A more sensible usage could be:
> 1. Scrap the class, move the two
> Have you read PEP 8?
>
> Your Common.Common class, which has two unrelated methods and no
> instance state, and is instantiated everywhere for a single use and then
> discarded, is not how we do things in Python land. What's wrong with a
> simple global function?
I only discovered PEP 8 rece
Hi, new to the list, but not the language. I'm completely at home with Python
:) Right now, I'm coding a roguelike game, and am having trouble getting the
map to update changes. I've got movement and collision detection, but for
whatever reason, the changes to the map are not being updated.
Whe
Actually, despite the slightly lower activity recently, I've found this
forum to be active and helpful and was quite surprised at the initial
complaint in the thread. I think the pygame developers and community do
a great job given that it's a completely volunteer effort.
Thanks guys!
--Mike
You might consider cairo.
--Mike
Bill Coderre wrote:
So I've been hacking Mac OS X's "Core Graphics" as a way of learning iPhone coding (gotta
sharpen those job skills), and I was wondering if there's an extension to pygame or python
somewhere that implements "path" based graphics.
In this m
On Sat, Jan 2, 2010 at 8:27 AM, Michael George
mailto:mdgeo...@cs.cornell.edu>> wrote:
In 0.0.4:
ImportError: Bad magic number in lib/game_globals.pyc
$ cd /home/mdgeorge/tmp/trolls_outta_luckland
$ ./Trolls_Outta_Luckland.py
Gumm
Forget that. Loo
nd.py", line 989, in main
jukebox = gumm_sound.Jukebox()
NameError: global name 'gumm_sound' is not defined
--Mike
B W wrote:
For those of you who yawned at v0.0.3... :)
http://www.pygame.org/project-Trolls+Outta+Luckland-1358-2419.html#
Many thanks to Michael George and Bryce Schro
No. They support cvs and svn if you want to use them, but you can also
upload any kind of file to the files section.
-M
Yanom Mobis wrote:
I know about SourceForge, but don't they make you use that SVN thing?
I just distribute my games as source code in .zip files.
--- On *Fri, 1/1/10, Alex
B W wrote:
I'm not sure what you mean.
If I move the mouse east, the cursor moves east. If I then start moving
the mouse west, the cursor immediately jumps to the west of the ship,
even if it's currently on the east.
--Mike
B W wrote:
On Mon, Dec 21, 2009 at 9:33 AM, Michael George wrote:
Nevertheless, because there's a lot of hand-eye involved in wielding
an invisible mouse there probably needs to be a visual cue. But I
think I get what you're saying. Correct me if I'm wrong. Picturing it
this way
B W wrote:
wrote:
Control scheme interesting and somewhat novel but a little difficult
(probably to at least in part to unfamiliarity); there is potential
there but it needs refinement. I think I would like mouse to aim, keys
to move the ship, personally.
Sadly for keyboard and joysti
I would create separate surfaces and masks for each frame. If you want
to keep all the frames in one surface, you can use subsurfaces for each
frame: http://www.pygame.org/docs/ref/surface.html#Surface.subsurface.
Then create the masks out of the subsurfaces and use Mask.overlap to do
the int
My approach is to choose a development platform and then use whatever
comes with. For example, I use ubuntu, and then apt-get install python
python-pygame. That way things will be painless for me and anyone using
the same platform as me. If I later decide I want to make it available
then I w
Massimo Di Stefano wrote:
to learn more maybe i need numerical examples, so now i'm creating 2
first function to :
transform lon-lat-heading to quaternion representation and viceversa
from quaternion to euler angles.
something like :
euler2quat(lon,lat,heading)
quat2euler(q) # where q = a
Greg Ewing wrote:
Michael George wrote:
I'm not sure, but I think using that terminology, if you have a
quaternion representing your position/orientation on the surface of
the sphere, then converting it to euler angles gives your (longitude,
latitude, heading) = their (heading, att
Michael George wrote:
Hi Massimo,
You may find the quaternions in pyeuler useful:
And of course it's euclid, not euler.
--Mike
Hi Massimo,
You may find the quaternions in pyeuler useful:
http://code.google.com/p/pyeuclid/
I'm not sure, but I think using that terminology, if you have a
quaternion representing your position/orientation on the surface of the
sphere, then converting it to euler angles gives your (longitu
Michael George wrote:
Greg Ewing wrote:
But the back of my envelope is not wide enough
to accommodate any more of this.
A little bit further and you would have seen the fail: sqrt(3) *
sqrt(6) = 3 * sqrt(2) and we're back where we started. However my
algebra book assures me
Greg Ewing wrote:
But the back of my envelope is not wide enough
to accommodate any more of this.
A little bit further and you would have seen the fail: sqrt(3) * sqrt(6)
= 3 * sqrt(2) and we're back where we started. However my algebra book
assures me (non-constructively) that {1, sqrt(2), s
DR0ID wrote:
Michael George schrieb:
Hello,
For my game I need to represent right isosceles triangles, and do
operations including translation and rotation in 15 degree
increments. Unfortunately, I cannot tolerate rounding error, because
it will cause bad visual and gameplay artifacts
Hello,
For my game I need to represent right isosceles triangles, and do
operations including translation and rotation in 15 degree increments.
Unfortunately, I cannot tolerate rounding error, because it will cause
bad visual and gameplay artifacts. I'm thinking of representing points
as ve
Michael George, NY USA
John Eriksson wrote:
I started to search the net to find inspiration for names and
nationalities to the AI-players. But then I thought it would be much
nicer to use the names and nationalities of pygame developers instead
of just using fictive names.
[snip]
If you
If you find this is too slow, you'll get much better performance by
removing the **'s, they're quite slow compared to other arithmetic. Use
x*x instead of x**2 and square both sides of the inequality to remove
the **0.5.
P.F.C. wrote:
I'm not getting the attachment but this might help.
If y
quality artwork.
Browsing the webring on their sites will yield great results. These are by
far some of the best resources on the Internet for games, commercial or
free.
I hope this will get you started,
Michael Fiano,
BloodCurse Team Leader
On Sun, Aug 23, 2009 at 6:48 PM, Michael Long wr
There's Reiner's tilesets: http://reinerstileset.4players.de/
He has some other free resource besides tiles as well.
-Michael
On Sun, Aug 23, 2009 at 4:58 PM, Henrique Nakashima <
henrique.nakash...@gmail.com> wrote:
> Hello,
>
> I am writing a framework to develop
Note that you would need rotate_point or something similar if you want
to rotate around a point that's not the center.
Michael George wrote:
Oops, I made a type. See attached
Michael George wrote:
Actually, after looking more closely, rotate_point wasn't what you
needed. The p
Oops, I made a type. See attached
Michael George wrote:
Actually, after looking more closely, rotate_point wasn't what you
needed. The problem was because when you rotate the image, the output
is still an upright rectangle, and you were placing (the upper left
corner of) that rectang
still newbie on Pygame, and i still struggle a lot about
how Python deals with variables, arrays, lists, and methods )
if someone know how to fix it, be welcome on editing that, and sharing
us the resulting pastebin url - thanks a lot in advance! :)
On 7/19/09, Michael George wrote:
You can
You can use a function from my game:
http://pen.svn.sourceforge.net/viewvc/pen/data/parts/cannon.py?revision=31&view=markup
see the rotate_point function
--Mike
Paulo Silva wrote:
hi,
i confess it seems a bad handle from me about sprite rotation on
Pygame - do someone know better how we can
Daniel Jo wrote:
Either singletons or globals would work fine. Singletons are more
useful when you see a need to enforce a rule that the class must be
instanced only once, but if you are the only developer and can trust
yourself not to do something silly, globals work just as well. I tend
to
Because python modules are just like classes, I tend to avoid the
singleton pattern in python and simply use module-level variables. For
example, in my game I have:
---globals.py---
import pygame
pygame.display.init()
screen = pygame.display.set_size(...)
# a handful other commonly used vari
are drawing in the wrong order?
On Tue, Jun 30, 2009 at 5:41 PM, Michael Fiano wrote:
> Fawkes,
> Yes, my rock is actually on a separate layer that is supposed to be drawn
> after the base terrain, but it seems it has to be reorganized as somehow the
> transitions are drawn after the 2
Fawkes,
Yes, my rock is actually on a separate layer that is supposed to be drawn
after the base terrain, but it seems it has to be reorganized as somehow the
transitions are drawn after the 2 layers with my recent changes.
On Tue, Jun 30, 2009 at 9:52 AM, Fawkes wrote:
> Michael,
>
&g
Thanks for the suggestions. Using 12 transition tiles for every type of
terrain tile, I was able to automatically fill in the transitions. I'm not
sure if more transition tiles are needed, as I'm pretty happy with the
results so far. Now I am onto part 2, which is ordering them to be drawn by
prece
Sorry, I forgot to mention that I already have all the transition tiles and
they are not simple gradients, but pretty nice pixel art that is different
in all directions making it look pretty realistic. For each type of terrain
it should smooth the edges using the existing transition tiles.
On Wed,
I am looking into edge tile placement algorithms for 2D square tile maps,
for the pygame 'bloodcurse'. The idea is I have a layer of square tiles
representing each type of terrain laid down. Then another layer with
transparent curves is layered over the top of the previous layer to create
transitio
Lenard, what you suggested worked perfectly. If I'd have paid more
attention when learning about blitting I'd have known that!
Thanks to everyone for your help :)
Certainly. If you test this and nothing updates, move it partially
outside of the screen space and hopefully you'll see what I'm
experiencing. Keep in mind I did this quickly just for testing
purposes, so just ignore the inefficiency of rendering the font every
frame.
pygame.init()
To Rene, I am using 1.8.1 (typo!)
To Ian,
I was under the impression that the rendered font's rect would also
be its coordinate location within the window. For example, I would
blit it to the display's surface and the get_rect would return the
exact area of the display that needed to be updated.
I forgot to mention that the code example I gave is similar, but not
exactly like the code I'm trying to use. The example actually hangs on
my system, but the original code has the weird effects I mentioned.
However, there is not really a huge difference between the two besides
the location of the
Hi, I'm fairly new to pygame, and I tried posting this before, but I
don't think it went through (sorry if this is the fourth posting... I'm
having a fail-day).
The issue I'm having is with pygame.display.update(rectangle_list). It
doesn't seem to update correctly when I pass a rectangle list with
One option I've been investigating is the use of convolutions for
bitmask collision response. I've been using it for drag-and-drop
collision response, but you might find it useful for other kinds of
response as well.
The way it works is as follows: if I have an object that's moving
through a
My game pen (http://sf.net/projects/pen) uses XML to save levels and
solutions. It's possibly a little fancier than you need because the
game itself is extensible, so it uses some python dynamic dispatching.
Anyway, you can take a look at the save and load methods of level.py at
http://pen.sv
1 - 100 of 282 matches
Mail list logo