Quantcast
Channel: Nick Mudge's Weblog
Viewing all 69 articles
Browse latest View live

Discover Gallery Features Project Developed By Perfect Abstractions

$
0
0

LafargeHolcim's Technical Information System Ignition project was recently featured in the Discover Gallery at the 2016 Ignition Community Conference.

The user interface in this project was developed by Perfect Abstractions. You can see a video about it at this link: Ignition Helps Huge Company Empower Thousands of Users

Here's a brief description of some of the interesting things we did:

Dynamic Creation of Template Instances

We displayed a list of names of Ignition templates in the client. We implemented the ability for users to drag a template from the list and drop it on a window. An instance of the template would be dynamically created and placed where the user dropped it. After that the user could resize, move and configure the template. Whatever the user did it could be saved and used later. We essentially created a simplified Ignition designer in the Ignition client that regular users could use to create and save functionality. You can see this functionality in the video.

Graphics Library Integrated Into Ignition

We integrated a graphics library into Ignition that shows how things are connected to each other in a graphical, animated and interactive way. You can see this functionality in the video.

Excel in Ignition

We heavily customized an Ignition Power Table to behave and function like an Excel spreadsheet. Users can add columns and rows. Users can input values and create formulas. Users can do various text formatting like change font, color, height, change text alignment and more. Users can also drop Ignition tags into cells and see real-time values. And more can be done. You can see this functionality in the video.


Power Scripting Module Released for Ignition 7.9

Drag and Drop Ignition Templates on the Template Canvas

$
0
0

I was curious if it was possible to implement the ability to drag and drop Ignition templates onto a template canvas. So I implemented it. I found that it is possible and it works. I am releasing the Template Canvas Drag and Drop project so you can have it, use it, and modify it. Download here: TemplateCanvasDragAndDrop.proj

This project shows a way for users to dynamically create Ignition screens in the runtime client by choosing templates that were created in the Ignition designer and dragging and dropping them onto a template canvas component. Additional functionality such as saving the states of screens to a database and opening them could be developed.

The Template Canvas Drag and Drop project has two windows. One window shows a list of Ignition templates that users can choose from to make a screen. Ignition automatically stores a thumbnail image of every Ignition template that is created. So the first window simply grabs the thumbnail images from the project and displays them to the user.

Users can click on a thumbnail template image and drag it onto the other window. When they drop the template the template appears in the other window where it was dropped. Then the user can select the template and move it around on the screen. I also implemented a right-click popup menu so users can right click on a template and delete it.

At the top is an "Edit" button. When this button is selected the project is in edit mode and existing templates can be clicked on and dragged around. When the button is unselected templates can be interacted with in the normal way.

The project is a good start but there is much more that can be implemented from this point. It shows that these things are possible. The ability to resize templates with the mouse can be implemented. The ability to save user-created windows, close them and open them can be implemented, and much more.

Here is a video that shows the project:

While dragging and dropping templates on a template canvas does work I admit that it is not ideal. There is one main annoyance: a change to the template canvas causes all templates to be reloaded. So if you just want to change the position of one template or add/delete one template, then all the templates get reloaded and there is a flash of a "Loading" message. Implementing configuration functionality on templates might be difficult because templates loose their state when the template canvas changes. If you can live with these problems then drag and drop with a template canvas can work.

A better solution would be to have a scripting function that can dynamically create template instances and add them to containers. This is something I've been thinking of working on. I am curious how many people would want this. I would add it to the Power Scripting Module.

Ignition Clients Displayed on High Resolution Monitors

$
0
0

Awhile ago Travis Cox gave a solution on his blog to make Java applications (and therefore Ignition clients) display nicely on high resolution monitors.

Check out his solution here: Java and High DPI Displays

Storing Images in Ignition Projects

$
0
0

Normally images in Ignition are stored in the Ignition gateway, not in Ignition projects. This makes it easy to reuse the same images in multiple projects, but it makes projects less portable because images used in projects are not exported with projects.

So you might add your own special icons and images to Ignition and use them in your project. Later you export your project and send the project export file to a colleague. Your colleague imports the project into a different Ignition server and the images are missing. Ah man, too bad. This blog post shows how to solve this problem so that your images stay with your exported projects.

One way to solve the problem is to use SVG graphics within your projects. SVG graphics are components in Ignition and are saved in Ignition projects.

However if you want to use jpeg and/or png images in your projects and want them to be exported as part of project files, follow the steps below.

Or you can just watch this video: How to Store Images In Ignition Projects

How to store jpeg and png images in an Ignition project

Step 1.

Create a new client tag with the tag path and name, "project_images". Make the value of the tag an empty dataset. This client tag is where the project images will be stored.

Step 2.

Download this project file: ProjectImagesTemplates.proj. Click on the link to download the file.

Import that project file into your existing Ignition project using the Designer.

The project file contains two Ignition templates: The ProjectImageStorage template and the ProjectImage template.

ProjectImagesStorage template:

The ProjectImagesStorage template is used to upload and manage images in your project.


ProjectImage template:

The ProjectImage template is used to display images that are stored in your project.

Step 3.

Open the ProjectImageStorage template in the Ignition designer. Put the Designer into preview mode and click on the "Upload Image" button to find images on your local computer and upload them into the project. Give names to images at the same time you upload them.

Uploaded images will be added as rows to the "[client]project_images" tag and will appear in the table in the template. The table is bound to the "[client]project_images" tag.

It is possible to change the name of an uploaded image by double clicking in a name cell. It is possible to remove images by selecting a row in the table and pressing the "Remove Image" button.

Be sure to use the ProjectImageStorage template in the Ignition Designer and not in a client.

Step 4.

Drag and drop the ProjectImage template on windows and templates where you want to display images.

The ProjectImage template has a template property called, "imageName". For each ProjectImage template instance on a window or template input the name of an image as given in ProjectImageStorage template. Setting the name of an image in the imageName property will make that image display.

Step 5.

Save the project in the Designer. The images that are uploaded in the Designer will not be available to clients until the project is saved.

Step 6.

The next step is to join my email list. Just kidding, you are done. But you should join my email list if you haven't already. So you are updated about new blog posts.

The solution given in this blog post is an efficient way to store images in projects and display them multiple times across multiple windows and templates. Your .proj project export files will include your images. And when you import your projects into a different Ignition server, your images will be there, displaying and working.

Check out this video that shows the steps: How to Store Images In Ignition Projects

New Perfect Abstractions Blog

View the Ignition wrapper.log File in the Designer or Client

$
0
0

One of the Perfect Abstractions Ignition project developers developed a very useful tool for viewing the Ignition wrapper.log file in an Ignition client or designer.

Find out what the Ignition wrapper.log file is and why it is useful.

We are releasing the Wrapper.log Viewer project here for other people to use. Download this project file: WrapperLogViewer.proj. Ignition 7.7.5 or higher is required to import the project.

Here is a screenshot of the project:

The Wrapper.log Viewer project was designed to be very easy to install and use. To install it import the Wrapper.log Viewer project into an existing Ignition project or import it as a new project. Note that importing into an existing project will delete existing Gateway Event Scripts in the project. That is all that is needed to install it. No database connections or anything else.

To use the Wrapper.log Viewer project in an Ignition designer open up the ViewerWindow window and put the designer into preview mode. The current contents of the wrapper.log file will display within 5 seconds.

To use the project in a client simply start a client and open the ViewerWindow window. Very easy, nothing to it.

The Wrapper.log Viewer project has been tested on both Windows and Linux.

How it Works

The Wrapper.log Viewer project has a Gateway Timer Script that runs every 5 seconds. It checks to see if the wrapper.log file has been modified. If it has been modified then the last 64,000 characters of the wrapper.log file are copied into a memory tag. The memory tag is automatically created when the project is first used.

A binding and Python scripting in the ViewerWindow window updates the display of the wrapper.log file when the content changes.

The AutoRefresh button is used to toggle on and off the functionality to automatically update the display of the wrapper.log file content. The auto update functionality is on by default.

The ViewerWindow window automatically scrolls the display of the content to the newest content as it comes in.

The Highlight Text field is used to highlight text in the wrapper.log contents that is displayed. This is useful for searching and finding specific text in the content.

Find out what problem the Wrapper.log Viewer project solves.

More Useful Projects

The Perfect Abstractions development team is interested in developing more useful tools and projects. If you think of something that you want feel free to tell us. We might implement it.

Request for Input, Startup Idea for A New Kind of Link Sharing News Website

$
0
0

I want to start an ambitious software project that people want.

I don't want to go into it blindly, building something I only hope people want. This is a request for your help in determining if what I want to build is actually something you and other people would be interested in and use. And if not, what would need to change or be added to make it useful to you? And if you think it is a terrible idea I would appreciate you telling me why.

Who am I?

I am Nick Mudge. Hi. I have been a software developer for 13 years. I made a lot of custom software for companies and I developed a number of software products. I started a software development company in 2014. More info and details here and here. I am passionate about computer programming, the web, and making software.

What is it?

The project is a website called Newsconomy.

Newsconomy is a "news economy". Multiple definitions of economy are valid and apply. In the sense of "the trade of goods in an area", the goods are links to interesting or useful websites, news and information. In the sense of "efficiency", Newsconomy can help you find interesting links and news efficiently.

The website newsconomy.com is a working prototype of what I want to build. You can sign up for an account on Newsconomy and see and use what I am talking about, but please read the rest of this blog post which explains the website.

Newsconomy is a new and different way to share links. It is a new and different way to organize and find interesting news and links. It is a new way to promote interesting content on the web. Because it is new and different it can require a little time and effort to understand it and how it can be useful. So please bear with me as I try to explain it. After reading this, if there are things that you don't understand then please email me and tell me and ask me questions. I want you to understand this and your questions can help me improve how I explain Newsconomy.

Link sharing websites such as reddit.com have a system of user interaction that is used to determine popular links and put them at the top of webpages that many users see. Users vote on links which give the links "points". The more points a link has the higher up it is placed on webpages. The purpose of all this is to make most visible the most interesting and useful content on the web, based on user feedback.

Newsconomy has a different system of user interaction for determining interesting and useful content that is made more visible. As far as I know it is a unique system for a link sharing website. But before I describe Newsconomy's system it is important to define some basic terms and mechanics of Newsconomy.

Basics

An "item" on Newsconomy is a URL to something on the web plus various data associated with the URL such as a title for the URL, a description if any, and tags. I will start using the word "item" to refer to a URL on Newsconomy and its associated data.

Newsconomy has the concept of "owning" an "item". If you own an item on Newsconomy it means it is yours and you control it and you can do various things with it. But you only own it on the Newsconomy website. You don't own it outside the Newsconomy website.

There are two different ways to "own" an item. One way is to submit a new URL to Newsconomy. If it hasn't been submitted before then submitting it will create a new item that you own. When submitting an item you will need to provide various data for the item such as a title, an optional description, tags and more.

If you try to submit an item that has already been submitted, Newsconomy will detect that and prevent you from submitting the URL. Instead you will be shown the item that was already submitted. You can still get the item by "buying" it, which is explained next.

Newsconomy has a monetary currency called lambda, represented with the λ symbol. Lambda is used to "buy" other people's items. This is the second way to own items. When you find an item that you like that is owned by someone else, you buy it with lambda. In other link sharing websites you upvote content you like, but in Newsconomy you buy it.

You buy an item for the same reason you upvote or "like" content on other websites. Because you like it, or because you think it is valuable or useful and more people should see it. Buying an item for more lambda increases its exposure to other people. You may also buy it because you want to save it as a bookmark so that you can access or remember it later. And/or you may think that the price for the item is too low. If you buy it you can sell it at a higher price and earn lambda.

Each item has a price that is set by its owner. Each item has a "Buy" link that users can click on to buy it. When someone buys an item the lambda is transferred out of his/her account and into the account of the seller, and the item gets transferred to the buyer's account.

Each user has an account. An account consists of information about a user and all the items that the user owns. Some things, like how much lambda a user has can only be seen by the user whose account it is and other things can be seen by anyone. You can see what items a user owns by clicking on the name of a user. Clicking on the name of a user takes you to a webpage that shows all the items the owner owns and it also shows you all the tags the user has used. You can buy any of the user's items if you have enough lambda. You can click on any of the user's tags to filter the user's items.

Each item can have up to 5 tags. A tag is a label that is added to an item to describe it and categorize it. Clicking on a tag in Newsconomy will cause it to display only the items that have that tag. This is filtering. You can see all items that have a tag across all users. It is also possible to see all items owned by a specific user that use a specific tag. It is also possible to filter items with multiple tags. Newsconomy URLs can use operators "+" and "|" to mean "and this tag" and "or this tag". Examples of filtering items by tags can be seen in this blog post: Newsconomy Has Some Tag Kung-Fu

Here's an example of what an item currently looks like on Newsconomy:

Example item

You can see in the trading history that mudge submitted the URL (http://www.google.com) and then later the user yami2yami bought the item for 10 lambda on the same day and set the price to 100 lambda. The only tag given for the item is "google".

User Interaction and Content Organization

Instead of upvoting content you buy items that you like. How do you get lambda? If you submit something good to Newsconomy, and set a reasonable price, someone will likely buy it from you and then you will have lambda. You also get lambda by buying items at low prices and selling them at higher prices. For example someone submits something good and sets the price to 1 lambda. You notice that it is good, and that the price undervalues it. So you buy it for 1 lambda and set a new price of 10 lambda. An hour later someone else buys the item from you and sets a higher price. You just made 9 more lambda.

The plan is to show on the homepage the items that have lots of trading activity and/or large buys/sells. If an item is bought several times at high prices then it is likely an interesting item so it will be shown on the homepage of Newsconomy and on or near the top of tag webpages. A tag webpage is a webpage that is shown that is filtered by a tag. For example this is a tag webpage that shows items about java: http://newsconomy.com/tag/java.

So you see, good, interesting content is found and displayed on the main webpages on the website based on users buying and selling them. But it is possible for a user to submit a really good item but set such a high price for it that nobody buys it and so it isn't noticed by the algorithm that determines which items to make more visible. I will probably need to include some other factors in determining which items to make more visible.

It is possible to change what items are shown on the homepage of the website and other places. There is a link called "submitted". Clicking that will show items that have recently been submitted in date order. This is how people can find new items to buy.

Currently the homepage of Newsconomy only shows recently submitted items and items that have been recently bought. But this will change when the amount of item submissions and trades increase.

Value

Newsconomy will help people evaluate the value and usefulness of websites, news and information on the web because they will see how much lambda people are willing to pay for them as items on Newsconomy. The trading history on an item shows every time it was sold, when it was sold, and who bought it and for how much.

What I want to do and build

  1. Newsconomy.com is currently using old web/programming/design technologies. I want to rewrite it using modern web technologies such as the Luminus web framework. This includes giving Newsconomy a modern, good looking visual design, and better user authentication.
  2. I want to promote and market Newsconomy to get new users. I will create official documentation for Newsconomy. I will continue to build, communicate with and help the community. I will listen to users and based on user feedback I will add new features to Newsconomy that make it better. For example if users want the ability to add comments to items, which are controlled by owners of items, then I will add that functionality. If users want stats of user activity, I will add that, etc.
  3. I want to integrate a cryptocurrency into Newsconomy to use as lambda. Smart Media Tokens as a cryptocurrency looks like something that would work well with Newsconomy. Using a cryptocurrency in Newsconomy would add a real financial value to lambda and would enable users to have a way to convert their lambda into a fiat currency such as USD etc. and it gives users a way to buy lambda.
  4. I want to create software and policies and systems that prevent fraud/cheating/gaming the Newsconomy website.
  5. I want to implement software, systems and policies to handle the instability of URLs.

    Newsconomy depends on URLs, but URLs can be unstable. For example a web server can redirect one URL to another. How should Newsconomy handle this? Currently Newsconomy checks to see if a web server redirects a submitted URL to a different URL and if it does then Newsconomy saves and uses the final redirected URL as the URL for the item. Newsconomy also needs a way to handle URL redirection by the use of Javascript.

    It sometimes happens that the URL structure of an entire website or part of a website changes and all the old URLs become invalid. Newsconomy needs to support a way to handle this smoothly, such as a way to update the URLs of items.

Financing Newsconomy

I want to spend most of my work time working on Newsconomy. In order to do that I need to find a way to financially support my time working on it and pay for other resources that are dedicated to it. I could offer an initial coin offering (ICO) for Smart Media Token-based lambda. This would have the benefit of putting lambda into users' hands which I think would encourage them to trade on Newsconomy. And/or I could start a Kickstarter campaign. Or perhaps I could find an angel investor. What do you think?

Newsconomy Background

I made the newsconomy.com prototype website ten years ago. I did not market or promote it very much and I didn't develop it much after initially making it. Despite that, and despite that it has ideas that are new and hard for people to understand, it has acquired 131 users who have submitted one or more items.

I have been personally using newsconomy.com successfully for the past 10 years as my bookmarking website. I personally have over 2000 web bookmarks on newsconomy.com.

Here is a link to a list of links about Newsconomy: http://newsconomy.com/tag/newsconomy

I was originally inspired by the old del.icio.us bookmarking website and I still am.

At this time in my life I want to make Newsconomy into a big thing and make it something very interesting and useful for you and others.

Your Feedback

I am interested in your suggestions and input, good or bad. You can write a comment or send me an email: nick@perfectabstractions.com.

If you are interested in Newsconomy and/or want to be a part of its community, please fill out the form below to join the Newsconomy email list. Your interest means a lot to me.


View the Ignition wrapper.log File in the Designer or Client

$
0
0

One of the Perfect Abstractions Ignition project developers developed a very useful tool for viewing the Ignition wrapper.log file in an Ignition client or designer.

Find out what the Ignition wrapper.log file is and why it is useful.

We are releasing the Wrapper.log Viewer project here for other people to use. Download this project file: WrapperLogViewer.proj. Ignition 7.7.5 or higher is required to import the project.

Here is a screenshot of the project:

The Wrapper.log Viewer project was designed to be very easy to install and use. To install it import the Wrapper.log Viewer project into an existing Ignition project or import it as a new project. Note that importing into an existing project will delete existing Gateway Event Scripts in the project. That is all that is needed to install it. No database connections or anything else.

To use the Wrapper.log Viewer project in an Ignition designer open up the ViewerWindow window and put the designer into preview mode. The current contents of the wrapper.log file will display within 5 seconds.

To use the project in a client simply start a client and open the ViewerWindow window. Very easy, nothing to it.

The Wrapper.log Viewer project has been tested on both Windows and Linux.

How it Works

The Wrapper.log Viewer project has a Gateway Timer Script that runs every 5 seconds. It checks to see if the wrapper.log file has been modified. If it has been modified then the last 64,000 characters of the wrapper.log file are copied into a memory tag. The memory tag is automatically created when the project is first used.

A binding and Python scripting in the ViewerWindow window updates the display of the wrapper.log file when the content changes.

The AutoRefresh button is used to toggle on and off the functionality to automatically update the display of the wrapper.log file content. The auto update functionality is on by default.

The ViewerWindow window automatically scrolls the display of the content to the newest content as it comes in.

The Highlight Text field is used to highlight text in the wrapper.log contents that is displayed. This is useful for searching and finding specific text in the content.

Find out what problem the Wrapper.log Viewer project solves.

More Useful Projects

The Perfect Abstractions development team is interested in developing more useful tools and projects. If you think of something that you want feel free to tell us. We might implement it.

Viewing all 69 articles
Browse latest View live