Jump to content

Recommended Posts

Calculate Anything is a workflow for Alfred 4, that uses natural language and is able to calculate multiple things like currency, time, vat, percentage, etc.

 

Why?


There are several workflows out there but i just needed a workflow that worked naturally for example you can open alfred and type 100 + 9 and alfred will give you a result no need for keywords or hotkeys it just works, i wanted to be able to jus type 100 + 16% or 100 euros to usd or 100km to cm or 100 years to hours and a large etc. and so this workflow was created.

 

Features


- Natural language - type 100 euros to dollars or 100 euros in usd or 100€ to $ or 100eur usd or 100 euros a dolares. It does not matter, the same result will be displayed.
- Currency - Up to 168 currencies
- Units - 100 kilometers to meters or 100km to m or maybe 100km m
- Percentages - 100 + 16% | 100 - 16% etc.

PX,Em,Rem,Pt - 12px or 12px to em or 12px pt
- Time - time +15 years? now plus 15 hours? or need to convert a timestamp?
- VAT - value added tax calculations, we all need this
- Translations You can create your own translations to display results in your language
- Keywords Extend the natural language in the queries so you can type 100 dolares a pesos and the code will see 100usd to mxn

 

Download


Download directly from Github releases page, make sure to download the latest release. Download here

 

Base Configuration


There's only one global configuration and is the language, this configuration will be used to display the messages in your own language. View the Translations secction for the available languaes.

Configure it with.

 

calculate configure and select Set base language and enter the language for example es_ES For more information about configuration click here

 

Currency

 

You can use natural language or type a few characters and that's all, for example:

  • 100 usd to mxn
  • 100$ in mxn
  • 100€ to $
  • 100 euros to dollars
  • 100 euros a dolares (you can also write it in your own language)
  • 100eur (If no target the currency will be converted to the base currency that you configured)

 

All this examples will simply work, you can add spaces between the value and the currency or don't.

 

currency.gif

 

If by any chance you don't remember the currency symbol or abbreviation simply type calculate list and select "List Available Currencies" (view the gift above)

 

Currency Options

 

By default the workflow will use exchangerates api to make the conversion, exchangerates has only support for 32 currencies, if you need support for all the currencies that this worflow includes you need to get a FREE API Key from https://fixer.io it takes less than a minute.

 

The following options are available for the currency. Simply launch Alfred and type calculate configure and select any of the options below. View the configuration section for more info

 

Set base currency

This will become your base currency, if you type 100eur it will automatically be converted to mxn, examples of currency (USD, EUR, MXN, CAD, etc)

 

Set currency locale

Used to give format to the converted amount using the money format of your contry

 

Set Fixer API

Set your fixer API Key for support more currencies

 

Currency Symbols

 

You can also use currency symbols in your query for example 100¥ to € will be converted to 100JPY to EUR, here is a list of available symbols.

 

Please go to the repo description on Github for a full list of supported symbols it's really difficult to write them here in the forum. View Currency Symbols

 

Units

 

You can write your query using natural language or just a few characters, either way this workflow will give you the result you need.

 

  • 100 ounces to kilograms
  • 100oz to kg
  • 100oz = kg
  • 100oz kg
  • 10 years to months
  • 10years to seconds
  • 1 year to sec
  • 1hr s
  • 10 días a horas (use your own language)

 

If you don't remember the unit abbreviation just simply type the name for example instead of "oz" you can type "ounce" or "ounces" or even use words in your own language for exaple "onza" or "onzas" in spanish.

 

unit.gif

 

Finally if you still don't remember the unit abbreviation or it's name simply type calculate list and select "List Available Units" you can type to filter, etc.

Please go to the repo description on Github for a full list of units it's really difficult to write them here in the forum. View Units

 

Units Options

 

The following options are available. Simply launch Alfred and type calculate configure and select any of the options below. View the configuration section for more info

 

Set System of Measurement

Here you can define your System of Measurement, this option is still in development but as the workflow grows this might be necessary for US users, by default the metric system will be used but you can define imperial or metric

 

Percentages

 

You can easily calculate percentages for example:

 

  • 15% of 50 = 7.50  //7.5 equals to 15% of 50
  • 120 + 30% = 156  //120 plus the 30% of 120
  • 120 plus 30% = 156  //120 plus the 30% of 120
  • 120 - 30% = 84  //120 minus the 30% of 120
  • 120 minus 30% = 84  //120 minus the 30% of 120
  • 30 % 40 = 75%  // 30 is 75% of 40.

 

Translations and natural language can also be used

  • 120 más 30% = 156

 

percent.gif

 

Time

 

Time is triggered by a keyword because is not often used so you can simply open alfred and type time

 

Gives you the current time

  • time

 

Converts the timestamp to a regular date

  • time 1577836800

 

Gives you the time from now plus anything you want

  • time +15 days
  • time now plus 3 days

 

Number of days until specified date

  • time days until 31 december

 

The start date of current year

  • time start of year

 

The start date of specified year

  • time start of 2021

 

The end date of current year

  • time end of year

 

The end date of specified year

  • time end of 2021

 

It also works in your language

  • time inicio de 2020
  • time fin de 2020
  • time dias hasta 31 diciembre

 

Get information about date

  • time 31 December, 2021 18:00:00
  • time 31/12/2021 18:00:00
  • time 12/31/2021 18:00:00

 

Calculate the difference between two dates

  • time 25 December, 2021 - 31 December, 2021
  • time 31-11-2019 - 21-11-2019
  • time 11/31/2019 - 11/21/2019

 

time.gif

 

Time Options

 

The following options are available. Simply launch Alfred and type calculate configure and select any of the options below. View the configuration section for more info

 

Set base timezone

Base time zone to calculate dates in your time for example (America/Los_Angeles, Mexico/General, etc.)

 

Add date format

Configure a new date format so the date is displayed the way you want for example (j F, Y, g:i:s a)

 

Delete date format

It will show you a list of configured date formats, simply select the one you want to delete and press enter to remove it

 

Time will use the language that you configure with Set base language

 

VAT (value added tax)

 

With this you can calculate the vat of a given amount. Like time, vat is also triggered with the keyword "vat" you can change the keyword in the workflow.

 

Given the following query

vat of 400 (with 16% vat configured, you can configure your own percentage)

 

You will get

  • VAT of 400 = 64 // VAT Amount
  • 400 plus VAT = 464 // Amount plus vat
  • 400 minus VAT = 344.82 // Amount minus vat

 

VAT Options

The following options are available. Simply launch Alfred and type calculate configure and select any of the options below. View the configuration section for more info

 

Set VAT percentage for example (16%)

 

Configuration

 

You can easily configure the workflow simply by opening Alfred and typing calculate configure you will see a list of all the available options to configure the workflow, select the option you want and press enter then simply enter your value and again press enter to save it. Check the following gif if you have doubts.

 

config.gif

 

 

Translations

 

Please check the available languages on Github, it's easier to update the information there and also how you can create  a translation.

 

Keywords

 

Keywords are words that can be used when writing a query in natural language for example a keyword "ounces" will be converted to "oz", "kilometers" will be converted to "km" or "dollars" will be converted to "USD", "seconds" will become "s" and a large etc. This keywords allows the user to type in a more natural way and in their own language. You can write your own keywords to extend the functionality, please check the information on Github.

 

Stop Words

 

Stop words are words that can be used in the query when using natural language for example "100km to cm" - here the stop word is "to"

 

Stop words are useful for two things:

 

  1. Allows the user to write more naturally and in their own language (e.g 100 dolares a mxn) "a" is the stop word
  2. Are used to check if the query has to be processed for example:

 

100km equals meters

 

if the word "equals" is not registered in the stop_words array then it won't be processed. At the end this stop words are removed so 100km to cm becomes 100km cm.

 

Please take a look at the readme on Github to learn more about this.

 

For Currency, Percentages and Units this workflow will only process the query if it begins with a digit and it has at least 3 characters. Time and VAT have a keyword because those are not often used.

 

Updates

 

Updates are installed automatically when a new version is released you don't have to do anything but if want you can check for new updates manually just launch Alfred and type calculate update the workflow will check for updates and it will let you now if there are any updates available.

 

Lastly

 

This is the first workflow that I create I just had 3 days to do it and 1 was for finding, naming flags, creating translations, creating the readme and this post. If you find a bug or you think this workflow can be improved please let me know or if I created/configured/exported the workflow incorrectly please let me know and I'll fix it. I just purchased Alfred Powerpack and had a great time creating this workflow and I hope that someone finds it useful apart from my lovely wife.

Edited by biati

Share this post


Link to post

This looks fantastic, and hijacking the numbers is a clever hack (though not sure how I feel about that, I might replace those with a single Script Filter with a proper keyword).


I’ve found some bugs.


You’re not creating alfred_workflow_data. You need to, as Alfred doesn’t do it for you. Without it, users will get an error.

 

I was expecting natural language processing to understand in, as in 100km in m or 100usd in eur.


On the currency converter:

  • Two decimal places isn’t enough precision for correct calculations. 1JPY = 0.00EUR isn’t too useful, even if approximately true (it’s 0.0083), but the real issue is that same rounding is used for the random calculations, which means the Workflow claims 10000000jpy is 0.00eur, which is 83060eur off the mark.
  • calculate set currency changes the flag icon and does the correct calculations, but it doesn’t change the currency symbol (it always shows as $).
  • Setting the currency to eur and searching for any value in eur (e.g. 100eur)  causes an error: Symbols 'EUR' are invalid for date 2019-11-13. I tried other currencies and couldn’t reproduce the bug.


Good work otherwise, I’m interested in using the fixed Workflow.


How often does it fetch currency data?

Share this post


Link to post
2 hours ago, vitor said:

This looks fantastic, and hijacking the numbers is a clever hack (though not sure how I feel about that, I might replace those with a single Script Filter with a proper keyword).


I’ve found some bugs.


You’re not creating alfred_workflow_data. You need to, as Alfred doesn’t do it for you. Without it, users will get an error.

 

I was expecting natural language processing to understand in, as in 100km in m or 100usd in eur.


On the currency converter:

  • Two decimal places isn’t enough precision for correct calculations. 1JPY = 0.00EUR isn’t too useful, even if approximately true (it’s 0.0083), but the real issue is that same rounding is used for the random calculations, which means the Workflow claims 10000000jpy is 0.00eur, which is 83060eur off the mark.
  • calculate set currency changes the flag icon and does the correct calculations, but it doesn’t change the currency symbol (it always shows as $).
  • Setting the currency to eur and searching for any value in eur (e.g. 100eur)  causes an error: Symbols 'EUR' are invalid for date 2019-11-13. I tried other currencies and couldn’t reproduce the bug.

 


Good work otherwise, I’m interested in using the fixed Workflow.


How often does it fetch currency data?

 

Hi vitor, thank you for your input.

 

I'm searching information about alfred_workflow_data but not sure exactly what you mean, are you referring to the folder stored in ~/Library/Application Support/Alfred/Workflow Data/com.alfred.calculateanything ? if so I've added some validation to make sure it exists and if not then it's created. If this is not what you mean please let me know.

 

1.- I've adde "in" to the stop words list so now 100km in m works as expected as any other query like 100 usd in eur.

2.- You are right about the decimals, I'm working on that.

3.- Already fixed the calculate set currency symbol

4.- mmm making some tests on this.

 

Once fetched, the currency is cached for 6 hours and the data is from fixer.io, this is the first time I work with currencies so not sure if 6 hours is a correct amount of time. The data will be fetched again only if a currency conversion is triggered.

Share this post


Link to post

Adding a Script Filter for each digit is a brilliant idea. So simple, so good. I am totally going to steal that 😛

 

Don't zip the exported .alfredworkflow file before uploading it to GitHub releases. .alfredworkflow files are zip files, just with a different extension. So there's no benefit in zipping them again.

 

3 hours ago, biati said:

Once fetched, the currency is cached for 6 hours and the data is from fixer.io

 

The exchange rates aren't from fixer.io: its API absolutely requires an API key. The rates are actually coming from exchangeratesapi.io, which doesn't require an API key. But it's also basically this list of 32 currencies converted to JSON, and the rates are only updated every 24 hours.

 

So unfortunately, most of the listed currencies aren't actually supported :(

 

image.thumb.png.6ed8ccd5072b001d9e6846de0834611a.png

 

Share this post


Link to post
8 hours ago, deanishe said:

The exchange rates aren't from fixer.io: its API absolutely requires an API key. The rates are actually coming from exchangeratesapi.io, which doesn't require an API key. But it's also basically this list of 32 currencies converted to JSON, and the rates are only updated every 24 hours.

 

@biati Thank you for the fast fixes.

 

I don’t need more than the currencies already available or an update window shorter than 24h, but if you want to support everything you envisioned, my recommendation is to add an optional field for a fixer.io API. If the user adds the API key (i.e. they need that kind of information), you use it; if not (i.e. more modest needs), you use what’s already in place.

 

By the way, I forgot to say so on the first post, but welcome to the forums.

Share this post


Link to post

Hi @deanishe I'm glad you liked the idea of using each digit as a script filter 😊 I won't zip the exported files anymore.

 

@vitor @deanishe

 

About the currencies, sorry for the confusion, I've added support for fixer.io also the previous functionality still exists so there's no need to create an API Key for fixer but in case you want to use fixer you can configure the API key with calculate set fixerapi yourapihere 

 

Also I've incremented the cache from 6 hours to 24 hours.

 

Not sure if I can edit my original post to update the information but you can find the updated readme on Github

Share this post


Link to post
25 minutes ago, biati said:

Not sure if I can edit my original post to update the information

 

You can. There’s a purple “Edit” at the bottom.

Share this post


Link to post

You're bloody fast with the updates!

 

1 hour ago, biati said:

Also I've incremented the cache from 6 hours to 24 hours.

 

I'd leave that at 6, tbh, or even 1 or 2 if a fixer.io API key is set. If the workflow pulls the exchange rates just before the site updates them, users may end up using rates that are up to 48 hours old. Your worse case scenario is basically (update interval * 2) - 1 second, so you should try to minimise that.

Share this post


Link to post
1 hour ago, deanishe said:

You're bloody fast with the updates!

 

 

I'd leave that at 6, tbh, or even 1 or 2 if a fixer.io API key is set. If the workflow pulls the exchange rates just before the site updates them, users may end up using rates that are up to 48 hours old. Your worse case scenario is basically (update interval * 2) - 1 second, so you should try to minimise that.

 

Hi @deanishe You are right, 24 hours is a lot, I've followed your recommendation and changed the update interval to 2 hours for fixer.io and 12 hours for exchangerates api. The updated workflow can be downloaded from Github 

 

Thank you for giving a try to this workflow.

Share this post


Link to post

Really interesting and useful.

 

But I've noticed some cooking and everyday small life US-American units aren't supported:

 

For example, teaspoons, tablespoons, cups... and fractions: 1/8 inch, 1/16 tablespoon

 

It'd be nice to have those.

Share this post


Link to post
7 minutes ago, Thomas Dunne said:

Really interesting and useful.

 

But I've noticed some cooking and everyday small life US-American units aren't supported:

 

For example, teaspoons, tablespoons, cups... and fractions: 1/8 inch, 1/16 tablespoon

 

It'd be nice to have those.

 

Hi @Thomas Dunne you are right, as a non us citizen I forgot to add those units, I'll be updating the workflow with this and if I find some other useful units I'll add them.

Share this post


Link to post
15 hours ago, Thomas Dunne said:

everyday small life US-American units (…) teaspoons, tablespoons, cups

 

Culinary units are used outside of the USA, and have precise metric measurements.

 

@biati How are you handling auto-updates? Does the Workflow support them? If not, I can help you set it up with OneUpdater (disclaimer: I’m the author).


I found some references to Packal inside the Workflow. Did you upload this to Packal, download it again, and made updates on that version? Either way, using Packal is no longer recommended, as the website is abandoned and buggy. The official place to share Workflows is the forums.

Share this post


Link to post

Great workflow! I just started playing around with it, and noticed a small bug. When subtracting percentages, it seems to have trouble subtracting round number percentages.

 

For example:

100 - 3% = 70

100 - 30% = 70

100 - 300% = 70

 

Keep up the good work! I can't wait to see how far along you get!

-N

Share this post


Link to post
On 11/15/2019 at 11:16 AM, vitor said:

 

Culinary units are used outside of the USA, and have precise metric measurements.

 

@biati How are you handling auto-updates? Does the Workflow support them? If not, I can help you set it up with OneUpdater (disclaimer: I’m the author).


I found some references to Packal inside the Workflow. Did you upload this to Packal, download it again, and made updates on that version? Either way, using Packal is no longer recommended, as the website is abandoned and buggy. The official place to share Workflows is the forums.

 

Hi @vitor I've added OneUpdater, did some tests and it seems to work without problems, it's now available in version 1.0.5 with some changes and bug fixes and a new way to configure the workflow. Thank you for OneUpdater it is really simple to use.

 

Share this post


Link to post
9 hours ago, NathanMcKnight said:

Great workflow! I just started playing around with it, and noticed a small bug. When subtracting percentages, it seems to have trouble subtracting round number percentages.

 

For example:

100 - 3% = 70

100 - 30% = 70

100 - 300% = 70

 

Keep up the good work! I can't wait to see how far along you get!

-N

 

Hi @NathanMcKnight thank you for trying the workflow, the error you mention has been fixed in version 1.0.5 please download the latest version from Github  also automatic updates have been added so this is the last time you have to manually download an update. Thank you for your nice words.

Share this post


Link to post
On 11/17/2019 at 1:24 AM, biati said:

 

Hi @NathanMcKnight thank you for trying the workflow, the error you mention has been fixed in version 1.0.5 please download the latest version from Github  also automatic updates have been added so this is the last time you have to manually download an update. Thank you for your nice words.

 

Thanks for your prompt response! The new version looks good.

 

I found a couple of other things in the way it calculates area, volume, and small scale calculations that you might be interested in taking a look at...

 

Cheers,

Nathan

 

 

Screen Shot 2019-11-20 at 11.05AM EST 1.png

 

Screen Shot 2019-11-20 at 11.05AM EST.png

 

Screen Shot 2019-11-20 at 11.03AM EST 1.png

 

Screen Shot 2019-11-20 at 11.03AM EST.png

 

Screen Shot 2019-11-20 at 11.02AM EST.png

 

Screen Shot 2019-11-20 at 11.01AM EST 2.png

 

Screen Shot 2019-11-20 at 11.01AM EST 1.png

 

Screen Shot 2019-11-20 at 11.01AM EST.png

Edited by NathanMcKnight

Share this post


Link to post

This workflow is awesome!  However, I'm not able to use decimals in currency conversion, neither with point (.) nor with comma (,). Does it only support integers, or have I missed a setting somewhere? it works with unit conversions.

Also, a feature request: Calculation of workdays that exclude weekends, e.g. today + X workdays.

Would be perfect for quickly calculating delivery dates. 

Share this post


Link to post
On 11/20/2019 at 11:06 AM, Peter U said:

This workflow is awesome!  However, I'm not able to use decimals in currency conversion, neither with point (.) nor with comma (,). Does it only support integers, or have I missed a setting somewhere? it works with unit conversions.

Also, a feature request: Calculation of workdays that exclude weekends, e.g. today + X workdays.

Would be perfect for quickly calculating delivery dates. 

 

Hi, I'm glad you like this workflow, about decimals and commas in currency I've fixed the error, I'll publish the update tomorrow.

 

About the workdays calculations I like that idea, it has been implemented, please check for updates tomorrow just open Alfred and type calculate and select check for updates.

 

Share this post


Link to post
On 11/20/2019 at 10:09 AM, NathanMcKnight said:

 

Thanks for your prompt response! The new version looks good.

 

I found a couple of other things in the way it calculates area, volume, and small scale calculations that you might be interested in taking a look at...

 

Cheers,

Nathan

 

 

Hi @NathanMcKnight I've updated the workflow to fix the problems you mention, please note there are some conversions that are not yet supported for example:

 

1 m3 to m
1 ft2 to in
144 in to ft2

 

The rest should be working fine, I'll be adding more units as soon as I have some free time. 

 

To install the update just open Alfred and type calculate and select check for updates.

Share this post


Link to post
On 11/21/2019 at 9:48 PM, biati said:

 

Hi, I'm glad you like this workflow, about decimals and commas in currency I've fixed the error, I'll publish the update tomorrow.

 

About the workdays calculations I like that idea, it has been implemented, please check for updates tomorrow just open Alfred and type calculate and select check for updates.

 

Oh, that's just fantastic, thank you so much! Especially the workdays feature will speed things up enormously for me.

 

Would you be interested in a translation to Swedish?

 

Edited by Peter U

Share this post


Link to post
1 hour ago, xilopaint said:

I'm struggling to configure my currency and date formats. Is there a list anywhere that could help me with that?

 

The workflow includes a list of currencies, just Open Alfred and type calculate select "list available units and currencies" then you can type your country name to get the currency code (press enter to copy the currency code) or if you prefer here is a list online https://www.iban.com/currency-codes

 

For dates, you can find here the available options to format the date the way you want. If you do not understand what you have to do in that page then go to this other page you can visually create the date in the format you want. In the section "Build your own" you can  for example select how you want to display the day (24 or Sun or Sunday, etc) do the same with the rest of options and at the top you'll see the generated code for example: date('F l Y'); the part you need is inside the quotes so just copy F l Y if you need more help just let me know.

Share this post


Link to post
5 hours ago, biati said:

 

The workflow includes a list of currencies, just Open Alfred and type calculate select "list available units and currencies" then you can type your country name to get the currency code (press enter to copy the currency code) or if you prefer here is a list online https://www.iban.com/currency-codes

 

For dates, you can find here the available options to format the date the way you want. If you do not understand what you have to do in that page then go to this other page you can visually create the date in the format you want. In the section "Build your own" you can  for example select how you want to display the day (24 or Sun or Sunday, etc) do the same with the rest of options and at the top you'll see the generated code for example: date('F l Y'); the part you need is inside the quotes so just copy F l Y if you need more help just let me know.

 

I know my currency code but if I enter it via `Set base currency` and `Set currency locale` I don't get my currency properly formatted.

 

5 hours ago, biati said:

For dates, you can find here the available options to format the date the way you want. If you do not understand what you have to do in that page then go to this other page you can visually create the date in the format you want. In the section "Build your own" you can  for example select how you want to display the day (24 or Sun or Sunday, etc) do the same with the rest of options and at the top you'll see the generated code for example: date('F l Y'); the part you need is inside the quotes so just copy F l Y if you need more help just let me know.

 

It seems your workflow is not accepting capital letters, so "Y" is being converted to "y" which gives different results for a date format.

Share this post


Link to post
15 hours ago, xilopaint said:

 

I know my currency code but if I enter it via `Set base currency` and `Set currency locale` I don't get my currency properly formatted.

 

 

It seems your workflow is not accepting capital letters, so "Y" is being converted to "y" which gives different results for a date format.

 

I've published a fix for the configuration error, the settings are now saved keeping upper and lowercase.

 

For the other thing you mention please first try the update otherwise you need to be more specific, what's your currency, your locale, give me an example of the output you are expecting, etc. something that helps me to make some tests otherwise there's nothing I can do.

 

 

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...