What is an Email Footer? The Ultimate Guide with Examples

Category Image 051

This post is originally published on Designmodo: What is an Email Footer? The Ultimate Guide with Examples

What is Email Footer? The Ultimate Guide with Examples

What makes an email design transparent and intuitive for subscribers? What reinforces an overall impression with strong messaging? What allows companies to send regulation-compliant emails? The answer to these questions is the email footer. An email footer is often overlooked. …

For more information please contact Designmodo

Performance Reviews Are A Waste of Time

Featured Imgs 23

At least weekly, I am asked for feedback or thoughts on a recent commercial interaction, most obviously for one-time transactions with a company rendering services; e.g., lawn service, gutter cleaning, teeth cleaning, financial, etc. Year over year, these requests increase (prefaced with, "And anything other than 5's is considered a failure...") and you start questioning the value-add. Tipping is a form of review. Returning or repeating customers are definitely a review of the services provided. Is there any actual value?  But I digress. . .

Image Source: "White Collar, c. 1940 - Linocuts by Giacomo G. Patri" by Thomas Shahan 3 is licensed under CC BY 2.0

Comparing Free WordPress.com vs. Self-Hosted WordPress.org

Category Image 091
Choosing between a free WordPress blog and a self-hosted WordPress blog ultimately depends on your goals and needs as an Internet marketer. While the free version may be easier to set up and manage, it lacks the flexibility and control that a self-hosted blog offers. Comparison: Free Vs. Self-Hosting WordPress Blog When it comes to […]

How To Test Your WordPress Site For Errors

Featured Imgs 13
Validating a website is an essential step to ensure that its pages adhere to the standards defined by various organizations. By validating a website, you can ensure consistent interpretation of your web pages by search engines, users, and visitors. In this article, we will discuss the importance of website validation and provide you with an […]

WordPress SEO Tutorial: SEO Process for WordPress

Featured Imgs 26
After publishing the article on “+200 Google ranking factors,” I understand that it is essential to clearly understand the SEO process before starting an SEO campaign. Without this understanding, creating specific plans for the campaign will be impossible, and you may take meaningless steps. Therefore, in today’s article, I will discuss the topic of “SEO […]

How do I use RGBA in pygame.draw

558fe5180e0e8fc922d31c23ef84d240

I am trying to make a drawing board in pygame but I want to be able to change the opacity using RGBA but it doesn't seem to be working, my code below:

import pygame as pg
import sys, os
from pygame.locals import *
pg.init()
draw = 0
color = 0
thick = 30
sav = 0
c = 0
r = 0
g = 0
b = 0
a = 255
l = 0
n = 0
z = 0
i9 = 1
circle = []
long = 0
drawing_name = ''
load_name = ''
th = False
fill = r,g,b,a
WHITE = 255,255,255
file = 0
surf = pg.image.load('dot.png') 
surf.fill((r,g,b))   
color_ = pg.cursors.Cursor((20,20), surf)
pg.mouse.set_cursor(color_)
screen = pg.display.set_mode((1440,900),pg.FULLSCREEN)
pg.display.set_caption('Drawing board')
screen.fill(WHITE)
#pg.mouse.set_visible(False)
font1 = pg.font.SysFont('Chalkduster', 50)
font2 = pg.font.SysFont('Chalkduster', 25)
text1 = font1.render('What do you want to name your artwork:', True, (0, 0, 0))
textRect1 = text1.get_rect()
textRect1.center = (700, 500)
text2 = font1.render(drawing_name, True, (0, 0, 0))
textRect2 = text2.get_rect()
textRect2.center = (700, 500)
text3 = font1.render('Too Long!', True, (0, 0, 0))
textRect3 = text3.get_rect()
textRect3.center = (700, 700)
text4 = font1.render('What do artwork do you want to load:', True, (0, 0, 0))
textRect4 = text4.get_rect()
textRect4.center = (700, 500)
text5 = font1.render(load_name, True, (0, 0, 0))
textRect5 = text5.get_rect()
textRect5.center = (700, 600)
text6 = font2.render('Not a drawing!', True, (0, 0, 0))
textRect6 = text6.get_rect()
textRect6.center = (700, 700)
line_pos_lst = []
def save():
    global sav
    sav += 1
    screen.blit(text1, textRect1)
while True:
    print(a)
    fill = r,g,b,[a]
    surf = pg.Surface((thick+20, thick+20))
    surf.fill((r,g,b))
    color_ = pg.cursors.Cursor((20,20), surf)
    pg.mouse.set_cursor(color_)
    for event in pg.event.get():
        if event.type == pg.QUIT:
            running = False
            pg.quit()
            sys.exit()
        if event.type == pg.KEYDOWN:
            if event.key == pg.K_SPACE:
                if sav % 2 == 0:
                    screen.fill(WHITE)
            if event.key == pg.K_TAB:
                if sav % 2 == 0:
                    draw += 1
                    pg.mouse.set_visible(True)
            if event.key == pg.K_p:
                if sav % 2 == 0:
                    r = 255
                    g = 255
                    b = 255
                    a = 255
                    color += 1
            if event.key == pg.K_0:
                if sav % 2 == 0:
                    thick = 5
            if event.key == pg.K_1:
                if sav % 2 == 0:
                    thick = 10
            if event.key == pg.K_2:
                if sav % 2 == 0:
                    thick = 20
            if event.key == pg.K_3:
                if sav % 2 == 0:
                    thick = 30
            if event.key == pg.K_4:
                if sav % 2 == 0:
                    thick = 40
            if event.key == pg.K_5:
                if sav % 2 == 0:
                    thick = 50
            if event.key == pg.K_q:
                if sav % 2 == 0:
                    color1 = [r,g,b,a]
            if event.key == pg.K_w:
                if sav % 2 == 0:
                    color2 = [r,g,b,a]
            if event.key == pg.K_e:
                if sav % 2 == 0:
                    color3 = [r,g,b,a]
            if event.key == pg.K_a:
                if sav % 2 == 0:
                    r = color1[0]
                    g = color1[1]
                    b = color1[2]
                    a = color1[3]
            if event.key == pg.K_s:
                if sav % 2 == 0:
                    r = color2[0]
                    g = color2[1]
                    b = color2[2]
                    a = color2[3]
            if event.key == pg.K_d:
                if sav % 2 == 0:
                    r = color3[0]
                    g = color3[1]
                    b = color3[2]
                    a = color3[3]
            if event.key == pg.K_m:
                if sav % 2 == 0:
                    screen.fill(fill)
            if event.key == pg.K_c:
                if sav % 2 == 0:
                    r = 0
                    g = 0
                    b = 0
                    a = 255
            if event.key == pg.K_r:
                if sav % 2 == 0:
                    r += 10
            if event.key == pg.K_g:
                if sav % 2 == 0:
                    g += 10
            if event.key == pg.K_b:
                if sav % 2 == 0:
                    b += 10
            if event.key == pg.K_PLUS:
                if sav % 2 == 0:
                    a += 10
            if event.key == pg.K_MINUS:
                if sav % 2 == 0:
                    a -= 10
            if event.key == pg.K_F4:
                pg.image.save(screen, 'temp' + str(i9) + '.png')
                save()
                a += 1
                std = True
                while std:
                    pg.draw.rect(screen, (255,255,255), Rect(100, 400, 1240, 400))
                    text2 = font1.render(drawing_name, True, (0, 0, 0))
                    textRect2 = text2.get_rect()
                    textRect2.topleft = (300,600)
                    screen.blit(text2, textRect2)
                    save()
                    if len(drawing_name) == 30:
                        screen.blit(text3, textRect3)
                        long = 1
                    else:
                        long = 0
                    for event in pg.event.get():
                        if event.type == KEYDOWN:
                            if event.key == pg.K_BACKSPACE:
                                drawing_name = drawing_name[:-1]
                            elif event.key == pg.K_RETURN:
                                a9 = pg.image.load('temp' + str(i9) + '.png')
                                screen.blit(a9,(0,0))
                                pg.image.save(screen, 'drawing_' + drawing_name + ".png")
                                drawing_name = ''
                                std = False
                            else:
                                if long == 0:
                                    if event.unicode == ' ':
                                        drawing_name += '_'
                                    else:
                                        drawing_name += event.unicode
                    pg.display.update()
                sav += 1
                screen.fill((255,255,255))
                continue
            if event.key == pg.K_F6:
                screen.blit(text4, textRect4)
                sav += 1
                th = True
                while th:
                    pg.draw.rect(screen, (255,255,255), Rect(100, 400, 1240, 400))
                    screen.blit(text4, textRect4)
                    screen.blit(text5, textRect5)
                    text5 = font1.render(load_name, True, (0, 0, 0))
                    textRect5 = text5.get_rect()
                    textRect5.center = (700, 600)
                    if len(load_name) == 30:
                        screen.blit(text3, textRect3)
                        long = 1
                    else:
                        long = 0
                    if file == 1:
                        screen.blit(text6, textRect6)
                    if os.path.isfile('drawing_' + load_name + '.png') == True:
                        file = 0
                    for event in pg.event.get():
                        if event.type == KEYDOWN:
                            if event.key == pg.K_BACKSPACE:
                                load_name = load_name[:-1]
                            elif event.key == pg.K_RETURN:
                                if os.path.isfile('drawing_' + load_name + '.png') == True:
                                    z0 = pg.image.load('drawing_' + load_name + '.png')
                                    screen.blit(z0,(0,0))
                                    load_name = ''
                                    th = False
                                else:
                                    file = 1 
                            else:
                                if long == 0:
                                    if event.unicode == ' ':
                                        load_name += '_'
                                    else:
                                        load_name += event.unicode
                    pg.display.update()
                continue
            if event.key == pg.K_F9:
                if sav % 2 == 0:
                    pg.mouse.set_visible(True)
                    c += 1
                    circle.append(pg.mouse.get_pos())
                    if len(circle) == 2:
                        x1,y1 = circle[0]
                        x2,y2 = circle[1]
                        radius = ((x1 - x2)**2 + (y1 - y2)**2)**0.5
                        pg.draw.circle(screen, (r,g,b,a),[x1, y1], radius, thick+20)
                        circle.clear()
            if event.key == pg.K_l:
                if sav % 2 == 0:
                    pg.mouse.set_cursor(pg.SYSTEM_CURSOR_CROSSHAIR)
                    pg.mouse.set_visible(True)
                    c += 1
                    l += 1
            if event.key == pg.K_ESCAPE:
                pg.quit()
                sys.exit()
        if event.type == pg.MOUSEBUTTONDOWN:
            if sav % 2 == 0:
                line_pos_lst.append(pg.mouse.get_pos())
                n += 1
                l += 1
                if len(line_pos_lst) == 2:
                    pg.draw.line(screen, (r,g,b,a), line_pos_lst[0], line_pos_lst[1], width=thick+20 )
                    print(line_pos_lst[0],line_pos_lst[1])
                    n += 1
                    line_pos_lst.clear()
    if draw % 2 == 0:
        if c % 2 == 0:
            if color % 2 != 1:
                pg.mouse.set_visible(False)
                r %= 255
                g %= 255
                b %= 255
                a %= 255
            x,y = pg.mouse.get_pos()
            pg.draw.circle(screen, (r,g,b,a),[x, y], thick, 0)
    pg.display.update()

Can you help me?

Visualizing a Career Path

Featured Imgs 23

If you work for a larger organization, the chances are that you may sooner or later find yourself reporting to someone with a very different background and, as a result, perspective on an organization, roles, etc.; for example, someone with a developer background reports to a marketer. Trying to explain a career and how it has led you to a place and how you might wish it to progress is difficult if the person you’re talking with has little exposure or understanding. Or, it could be simply that the person you’re talking to is a visual thinker. 

This is where I found myself recently. So, to facilitate a conversation, I thought I'd try to describe my career and desired direction more visually. After all, CV-style bio/representations are rather abstract, focus on a timeline, and need a domain understanding to appreciate the value.

The Intersection of CDP and AI: How Artificial Intelligence Is Revolutionizing Customer Data Platforms

Featured Imgs 23

In today's data-driven world, Customer Data Platforms (CDPs) play a pivotal role in helping businesses harness and utilize customer data effectively.  

These platforms consolidate data from various sources, providing valuable insights into customer behavior and preferences. They enable businesses to comprehensively understand their customers, facilitating targeted marketing campaigns, personalized experiences, and informed decision-making.