The Daily Dose

laugh every day with cartoons jokes and humor
  • Home
  • About
    • Press
      • Press Release – Announcing Laughzilla the Third ebook
      • Press Release – The Daily Dose Kicks Off Its 16th Year with New Books and More Irreverent Laughter
      • Press Release – Themes Memes and Laser Beams Now Available in Paperback
      • Press Release – Announcing Themes Memes and Laser Beams
      • In The News
    • Privacy
  • Archive
  • Books
  • Shop
  • Collections
    • Galleries
      • Gallery
      • Captions
      • Flash Cartoons & Greeting Cards
        • Laughzilla’s Oska Flash Animation Cartoon Greeting Cards
        • Oska Cupid Love Humor
    • #OccupyWallStreet
    • cats
    • China
    • Food
      • Hors d’oeuvres
        • Ball of Cream Cheese
      • Entrees / Main Courses
        • Meatballs with Baked Beans and Celery
    • Gadaffy
    • Google
  • Links
  • Video
  • Submit a joke
DeviantART Facebook Twitter Flickr pinterest YouTube RSS

Subscribe for Free Laughs!


 

Latest Comics

  • This Memorial Day, Trump Meme Coin Congratulates Profit Takers
  • 25 Years of The Daily Dose
  • The Best Cartoons
  • Bitcoin sings “Fly Me To The Moon”
  • 22 years of The Daily Dose

Comic Archive

Occupy Cyber Monday

Daily Dose News Roundup

  • Netflix launches Playground, a standalone games app for children aged eight and under
  • Monzo is shutting down its US operation, and its European banking licence explains why
  • Anthropic cuts Claude subscribers off from OpenClaw in cost crackdown
  • Musk wants a million data centre satellites. Bezos wants 51,600. Scientists want to know why.
  • Google launches Gemma 4: four open-weight models from smartphones to workstations

Quotable

"Radko Mladic, the Serbia whose name you can't pronounce without sounding drunk, was arrested for his crimes against humanity after the fashion police decided that he could not be arrested for his awful sense of style." ~ Yasha Harari

Fresh Baked Goods

Get The Daily Dose's ebook: Laughzilla the Third - A Funny Stuff Collection of 101 Cartoons from TheDailyDose. Click here to get the e-book on Amazon kdp. Laughzilla the Third (2012) The Third Volume in the Funny Stuff Cartoon Book Collection Available Now.

Click here for the Paperback edition


Support independent publishing: Buy The Daily Dose's book: Themes Memes and Laser Beams - A Funny Stuff Collection of 101 Cartoons by Laughzilla from TheDailyDose. Click here to get the book on Amazon. Themes Memes and Laser Beams - The Second Volume in the Funny Stuff Cartoon Book Collection.

Click Here to get the book in Paperback While Available on Amazon

Themes Memes and Laser Beams - 101 Cartoons by Laughzilla. Get the e-book on Lulu.

Click Here to get The Daily Dose Cartoon ebook on amazon kindle

Funny Stuff :
The First Cartoon Book
from The Daily Dose.
Available on Lulu.

a couple of laughzillas on a blue diamond background

Creating an Appointment in Outlook 2010 Part II

Feb20
by Sindy Cator on February 20, 2014 at 2:00 am
Posted In: Around the Web, Outlook, RegEx

Yesterday I posted about replicating how you can enter an item on Google’s calendar in Outlook. Today, we’ll look behind the form to see what’s going on. I won’t cover every piece of code, but you can download the code to see all of it. Let’s start with the Initialize event. In the entry point procedure, I set the When property in certain situations. In the Initialize method, I populate the narrative textbox if When already has a value.

Public Sub Initialize()
   
    If Me.When <> 0 Then
        Me.tbxNarrative.Text = Format(Me.When, "h:mm am/pm") & Space(1)
    End If
   
End Sub

If the user has already made some sort of selection on a calendar, this saves having to type it. Changing the narrative textbox also fires an event that is the bulk of the code in the form. Let’s take a look at that now.

Private Sub tbxNarrative_Change()
       
    Dim rxNarrative As VBScript_RegExp_55.RegExp
    Dim rxMatches As VBScript_RegExp_55.MatchCollection
    Dim dtTimeEntered As Date
    Dim sMeridian As String
   
    Set rxNarrative = New VBScript_RegExp_55.RegExp
    rxNarrative.Pattern = RegExPattern
    rxNarrative.IgnoreCase = True
   
    Me.lbxAppointment.Clear
    If rxNarrative.test(Me.tbxNarrative.Text) Then
        Set rxMatches = rxNarrative.Execute(Me.tbxNarrative.Text)
        With rxMatches.Item(0) ‘there’s only one match, all the capture groups are submatches of it
           
            ‘Get AM or PM
            sMeridian = GetAMPM(.SubMatches(0), .SubMatches(1))
            dtTimeEntered = ConvertStringToTime(.SubMatches(0), sMeridian)
           
            ‘Account for time zones
            Me.When = Me.Day + ConvertTimeToLocal(dtTimeEntered, .SubMatches(2))
            Me.What = .SubMatches(3)
           
            ‘Default to 1 hour duration if not entered
            If Len(.SubMatches(5)) > 0 Then
                Me.Duration = Val(.SubMatches(5))
            Else
                Me.Duration = 1 ‘hour
            End If
       
            If Len(.SubMatches(4)) > 0 Then
                Me.Location = .SubMatches(4)
            End If
           
        End With
       
        Me.tbxNarrative.BackColor = vbWhite
    Else
        Me.tbxNarrative.BackColor = vbYellow ‘visual indicator that narrative doesn’t work
    End If
   
    ‘Show the results
    UpdateListbox
   
End Sub

You need to set a reference to the VBScript Regular Expressions 5.5 library. I put the regex pattern in a separate, private function to keep the code tidy. I’ll show that below. If the regex passes, I call Execute to get the matches, then use the Submatches to populate my form’s properties. I get either AM or PM via another function. Then I use that and yet another function to convert the time the user entered into a Date data type. That date gets converted based to the user’s local time. The Duration property is set to 1 hour if the user doesn’t enter a duration. The submatches are in this order

  1. The time, like 3 or 3:00
  2. Either AM, PM, or an empty string if the user didn’t specify
  3. The time zone – EST, EDT, CST, CDT, MST, MDT, PST, PDT, or an empty string if not specified. Definitely could increase these options at some point.
  4. The subject – text that follows the time and precedes either location or duration
  5. The location – text that follows space+at+space
  6. The duration = n.n hour(s) that follows space+for+space

To get AM or PM, I wrote a separate function that takes the time as a string and whatever the user entered for AM or PM if any. If the user entered AM or PM, that’s what’s returned. If not, I assume the time is between 7AM and 6PM.

Private Function GetAMPM(ByVal sTime As String, ByVal sAmpm As String) As String
   
    Dim sReturn As String
    Dim dtTime As Date
   
    If Len(sAmpm) > 0 Then
        sReturn = sAmpm
    Else
        dtTime = ConvertStringToTime(sTime, "AM")
        If dtTime >= TimeSerial(7, 0, 0) And dtTime < TimeSerial(12, 0, 0) Then
            sReturn = "AM"
        Else
            sReturn = "PM"
        End If
    End If
   
    GetAMPM = sReturn
   
End Function

This is a little goofy because it checks the time before any time zone shift. I considered applying the time zone shift first, and probably should have, but I didn’t want to rewrite the time zone stuff, so I didn’t. Maybe I’ll fix that in the next version.

The GetAMPM function and the event procedure both use ConvertStringToTime, shown below. It uses the VBA.TimeValue function. TimeValue doesn’t work with a single digit, so I append the “:00″ if there’s not already a colon in there. I also tack on the meridian. When I call it from GetAMPM, I always use AM because I don’t know the meridian yet.

Private Function ConvertStringToTime(sTime As String, sMeridian As String) As Date
   
    If InStr(1, sTime, ":") = 0 Then
        ConvertStringToTime = TimeValue(sTime & ":00" & Space(1) & sMeridian)
    Else
        ConvertStringToTime = TimeValue(sTime & Space(1) & sMeridian)
    End If
           
End Function

Once I have the meridian, I recall ConvertStringToTime with the proper value and store that in dtTimeEntered – this is what the user entered converted to a Date data type. The next step is to account for any time zone information entered by the user. I call ConverTimeToLocal, which uses a Windows API to get the users time zone. I got the time zone API from Chip’s site.

Public Function ConvertTimeToLocal(ByVal dtTime As Date, ByVal sZone As String) As Date
   
    Dim tzi As TIME_ZONE_INFORMATION
    Dim tz As TIME_ZONE
    Dim lGmtOff As Long
   
    tz = GetTimeZoneInformation(tzi)
   
    Select Case sZone
        Case "EDT"
            lGmtOff = -4
        Case "EST", "CDT"
            lGmtOff = -5
        Case "CST", "MDT"
            lGmtOff = -6
        Case "MST", "PDT"
            lGmtOff = -7
        Case "PST"
            lGmtOff = -8
        Case vbNullString
            lGmtOff = -tzi.Bias / 60
    End Select
   
    ConvertTimeToLocal = dtTime – (TimeSerial(0, tzi.Bias, 0) + TimeSerial(lGmtOff, 0, 0))
   
End Function

This basically converts the time to GMT, then to the users time. If the user didn’t enter a time zone, Case vbNullString, the Bias (in minutes) is added and subtracted leaving the original time.

Everything else in the event procedure is just jamming submatches into properties. I turn the textbox backcolor yellow if the user enters something that the regex can’t decipher. At the end of the procedure, all those properties I filled are displayed in a listbox with a call to UpdateListBox.

Private Sub UpdateListbox()
   
    Me.lbxAppointment.AddItem "What: " & Me.What
    Me.lbxAppointment.AddItem "Where: " & Me.Location
    Me.lbxAppointment.AddItem "Starts at: " & Format(Me.When, "m/d/yyyy hh:mm")
    Me.lbxAppointment.AddItem "Ends at: " & Format(Me.EndTime, "m/d/yyyy hh:mm")
   
End Sub

I created a separate EndTime property that adds the duration to the start time. The duration can be an integer or a decimal and I split that out in a VBA.TimerSerial function. That makes me better than Google.

Public Property Get EndTime() As Date
   
    EndTime = Me.When + TimeSerial(Int(Me.Duration), (Me.Duration – Int(Me.Duration)) * 60, 0)
   
End Property

As promised, here’s the function that holds the regex pattern. I split it out into an array so I could hopefully understand it six months from now.

Private Function RegExPattern() As String
   
    Dim aPattern(1 To 11) As String
   
    aPattern(1) = "^((?:1[0-2]|0?[1-9])(?::[0-5]\d)?)" ‘time
    aPattern(2) = "\s*" ‘optional white space
    aPattern(3) = "([ap]m)?" ‘optional ampm
    aPattern(4) = "\s*"
    aPattern(5) = "([ECMP][DS]T)?" ‘optional time zone
    aPattern(6) = "\s*"
    aPattern(7) = "(.*?" ‘what
    aPattern(8) = "(?=\s+for\s+|\s+at\s+|$))" ‘look ahead for ‘ for ‘ or ‘ at ‘
    aPattern(9) = "(?:\s+at\s+(.*?" ‘where
    aPattern(10) = "(?=\s+for\s+|$)))?" ‘look ahead for ‘ for ‘
    aPattern(11) = "(?:\s+for\s+(\d*(?:\.\d+)?)\s*hour)?" ‘duration
   
    RegExPattern = Join(aPattern, vbNullString)
   
End Function

That’s probably enough code for one post. What you don’t see, but you can download, is the property getters and setters for UserCancel, Location, When, What, Duration, and Day. There’s also code for clicking OK and Cancel, which simply sets the UserCancel property and hides the form.

You can download MGoogleCal.zip

Tomorrow I’ll post a couple of notes and some installation instructions if you want to give it a try.

└ Tags: syndicated
a couple of laughzillas on a blue diamond background

Facebook turned down WhatsApp co-founder Brian Acton for a job in 2009

Feb20
by Sindy Cator on February 20, 2014 at 12:23 am
Posted In: Around the Web, Shareables

Here’s an inspiring story on perservering in spite of rejection. Four years after Facebook turned him down for a job, WhatsApp co-founder Brian Acton is now selling his company to Facebook for as much as $19 billion.

We love how upbeat Acton’s 2009 tweet is as he opines about “life’s next adventure.” That adventure turned out to be a 450 million-user mobile messaging giant and the largest-ever venture-backed deal.

Facebook turned me down. It was a great opportunity to connect with some fantastic people. Looking forward to life's next adventure.

— Brian Acton (@brianacton) August 3, 2009

Facebook can take solace in the fact that it wasn’t the only one to miss a golden opportunity, as Acton, who formerly worked at Yahoo, also appears to have been rejected by Twitter in 2009.

Thumbnail credit: Lionel Bonaventure / AFP / Getty Images

└ Tags: facebook, news, syndicated
a couple of laughzillas on a blue diamond background

Facebook is buying WhatsApp in a deal worth up to $19 billion

Feb19
by Sindy Cator on February 19, 2014 at 10:14 pm
Posted In: Around the Web, breaking, Insider

whatsapp android 3 520x245 Facebook is buying WhatsApp in a deal worth up to $19 billion

Facebook has announced the acquisition of mobile messenger WhatsApp for $16 billion. The deal includes $4 billion in cash, $12 billion in Facebook shares and an additional $3 billion in vesting restricted stock units for the WhatsApp team over the next four years.

At the time of acquisition, WhatsApp had picked up an impressive 450 million active monthly users and was growing by 1 million new registered accounts per day. That’s up from 400 million monthly users last December.

While the deal represents a much-deserved payout for the WhatsApp team, it’s also likely to come as a disappointment to users that had chosen WhatsApp as an alternative to Facebook’s own Messenger product. Similar to the terms of Instagram’s deal, WhatsApp will remain as an independent brand and team. That means that WhatsApp and Messenger will have the awkward situation of being both competitors and siblings in the marketplace.

In a blog post, WhatsApp CEO Jan Koum reassured users that the acquisition won’t result in any changes for them. Koum will join Facebook’s board of directors.

In 2011, Facebook acquired mobile messaging service Beluga. It kept it open for a few months, before folding it into Messenger and shutting it down.

Mobile messaging apps have been hot this past year, and larger tech companies are finally getting around to snatching them up. Japanese ecommerce giant Rakuten bought Viber last week for $900 million.

See also: WhatsApp is leading the mobile messaging battle, but will it win the war?

└ Tags: facebook, syndicated
a couple of laughzillas on a blue diamond background

Google schedules its 2014 I/O developer conference for June 25-26 with new lottery registration

Feb19
by Sindy Cator on February 19, 2014 at 9:51 pm
Posted In: Around the Web, Google

Google Senior Vice President Sundar Pichai has announced the dates for its 2014 Google I/O developer conference: June 25-26 at Moscone West in San Francisco.

The company has yet to update its official event site, but registration information and other details will arrive next month. This year’s conference comes more than a month later than the 2013 edition, which ran from May 15-17.

To address the rapid sell-outs that Google I/O has experienced in recent years, Pichai noted that this year’s conference will implement a new lottery-based registration system. Attendees will be randomly picked from the pool of developers that have expressed interest in the event.

Thumbnail credit: Kimihiro Hoshino / AFP / Getty Images

└ Tags: news, syndicated
a couple of laughzillas on a blue diamond background

Thinking of exiting your business? Explore every option

Feb19
by Sindy Cator on February 19, 2014 at 9:18 pm
Posted In: Analysis and Opinion, Around the Web, Entrepreneur, How-To's

145706429 520x245 Thinking of exiting your business? Explore every option

Neil Helm is Chief Executive Officer at OzForex, a global provider of online international payment services.


In October 2013, OzForex listed. It was the biggest IPO the Australian market had seen all year, and sparked a flurry of subsequent listings – but ‘going public’ was not the only option we considered, and until we had progressed our exit strategy to near completion, it also seemed the most unlikely.

Initially, a trade sale to a private equity firm or a trade buyer seemed a good choice for shareholders, and the one with the least unknown factors.

Now, in hindsight, we can say the choice to list was best for the company, the shareholders and our staff.

If you’re planning to sell your business or are considering an IPO, think about running both paths to exit with what is sometimes called a ‘dual track’ process. If you’re willing to commit time and resources to it, the process will allow you to consider the advantages and consequences of both options, as well as potentially creating some price tension between the two tracks.

The following points may help you when considering your exit strategies:

Trade sale

If you are attracting significant interest from buyers, it makes logical sense to begin considering your exit. In our case, the inbound calls and indicative offers we began to receive from potential buyers led us to put a formal structure in place that came to be known as “the process.”

Prior to starting, do address the size of the undertaking ahead of you. For us, that meant agreeing at board level that the dual track journey would take a significant commitment of time, money and focus with no guarantee of an outcome.

However, the potential upside in terms of growth, geographic expansion and business improvement with the right buyer was a very attractive proposition, so our journey began in February 2013.

Engage a good adviser

This sounds easy, but you need to research the market and identify a shortlist of advisers with the right credentials and experience for your particular market or industry.

Do your diligence on them, talk to previous clients and ask them to present their approach before making a decision.

Empower your management team

Where you can, engage with your management team, empowering and challenging them to step up to running the business while the leadership team focuses on the sale process.

This is critical, particularly during the final weeks of the process. In general, you can expect a time commitment of at least six months for the whole process.

Pay attention to NDAs

Prospective buyers are going to want to dig deep into your business in order to understand drivers for revenue, as well as potential risks. Ensure confidentiality by having tight NDAs signed by all parties. Be especially careful of competitors, who may just be ‘tyre kicking.’

Feel comfortable saying ‘no’

During the trade sale process, management should be readily available to respond to queries from potential buyers. Even so, understand that you can still say no to some requests – particularly if commercially sensitive.

Set firm deadlines

Once you’ve built up a list of potential buyers, you’ll need to weed out the less serious parties or those who want to get there but simply can’t. Try to keep the process moving smoothly by setting firm deadlines for each phase of the process.  Good advisers will manage this tightly.

Get to know your potential new owners:

You can never predict the future under your new owners, and you need to take everything they say with a grain of salt as they will be pitching themselves to you.

Nevertheless, it is still important to take the time to build a relationship with them once you get down to the final likely buyers. Even if they don’t end up being successful, you will learn something from each of them.

IPO

An IPO requires special preparation of its own, some of it complex. But, if it makes sense for your business, it is a very attractive option.

Engage good IPO advisers

As before, good advisors are key. The success of your listing will have a strong correlation with the IPO advisers you choose and the team you build around the process, which also includes lawyers and accountants.

Prepare a detailed prospectus

This will require plenty of time and resources, so be sure to prepare adequately. The prospectus will lay out the story and details of your business and help generate interest in it before listing, so it’s important that you get this right.

Engaging the right external resources to help with this is critical – you may not have the bandwidth across your existing team, so you need to judge this early.

Choose an experienced board

It is important to identify who the new Chairman of the company will be and then build a board around their skills and experience. The board should have a diversity of perspective as well as a collective set of competencies that will increase its ability to ask critical questions and assess information.

This should come in addition to its planning, stewardship and governing responsibilities, as well as personal characteristics that will stimulate healthy discussion. Start with a small board and build it over time as the business matures and grows.

Invest in your forecasts

If you go down the IPO route, you will need to provide the market with forecasts on your business. You need to invest the time in getting these right with all of your leadership team – achieving them will be critical to how the market will view your company in the future. 

Taking the leap

After deciding to go for an IPO, we haven’t looked back. It was a good decision for our business, and one that was well worth the time we spent preparing for it.

Of course, the choice of which path to choose depends on what best suits your business. If you’re struggling to make the decision, it may help to ask yourself what you want from an exit. What will give you the best valuation for your business? How would you like to continue to stay involved?

These are questions only you can answer, but engaging in a dual-track process will allow you to fully explore your options.  Don’t negate either until you have assessed the benefits of both – it could be that the less obvious choice turns out to be the best one.

└ Tags: syndicated
  • Page 14,480 of 14,637
  • « First
  • «
  • 14,478
  • 14,479
  • 14,480
  • 14,481
  • 14,482
  • »
  • Last »
The Daily Dose, The Daily Dose © 1996 - Present. All Rights Reserved.
  • Home
  • About
  • Archive
  • Books
  • Collections
  • Links
  • Shop
  • Submit a joke
  • Video
  • Privacy Policy