Well that’s what I was thinking…


validates_confirmation_of doesn’t seem to be working.


I have a table in my DB called “people” with fields called “yourname” and “yourpassword”


If you are having issues getting ‘_confirmation’ to work, look in your  scaffold structure to be certain the ‘_confirmation’ field is included everywhere it is needed:

in your ‘view’:

<div class="field">
<%= form.label :password %>
<%= form.password_field :yourpassword %>
<%= form.label :confirm_password %>
<%= form.password_field :yourpassword_confirmation %>

In your ‘model’:

validates_confirmation_of :yourpassword

In your ‘controller’:

# Never trust parameters from the scary internet, only allow the white list through.
def people_params
params.require(:people).permit(:yourname, :yourpassword, :yourpassword_confirmation)

This is the one that got me… if 'yourpassword_confirmation' is not included as a ‘white listed’ field ( ‘.permit’ ) it will be ignored COMPLETELY!… adding stuff manually requires a follow through of all locations within the scaffold structure.

Let me start by stating :

It Works!

I choose, at times to set before myself some interesting goals. In this case it is the task of migrating a Microsoft Web Access Application to something with a bit more longevity. With Microsoft deciding that the Web Access platform is no longer useful to them they dropped it like a hot potato and ran, leaving those of us who decided to use the platform with very few options.

The way I learn stuff is by doing, I have little patience for tutorials, so I usually wind up learning new stuff by asking “How do I do that?” and then spending a few moments (or hours…) on the web figuring it out. That being said, this blog post is not meant to be a “How do I do this – Please hold my hand.” kind of thing. Rather it is more of a framework for future projects I may have with this platform. If however, you do need a little hand holding, drop a comment, and I’ll see what I can do for you. Better yet, check out this online book: https://www.railstutorial.org/ it is a must if you know nothing about ROR…

What I used:

Ubuntu Server 16.04.3 (Installed on dedicated hardware):


SQL Server 2017 installed on Ubuntu Server:


Directions for SQL Server Ubuntu install:


Ruby and Rails:


my versions:

Ruby 2.4.1p111 (2017-03-22 revision 58053)
Rails 5.1.4

Database Connectivity for SQL Server:





Additional tools:




Server Connectivity and Development Tools

I am not a huge command line fan, but it is necessary to get all this working, here are the tools I use:








Some Initial Gotchas:

  • You may be tempted to build a RoR environment in windows, don’t. Ruby and thus Rails were developed in a Linux world. If you don’t want to do this in Linux, look elsewhere for your development environment.
  • ROR is very much a “The sum is greater then it’s parts.” kind of thing. All those “parts” are dependent on each other. Rails has many automated processes and can be a joy when building stuff, including the DB from scratch. It can be a bear, and loaded with gotcha’s if you try to do too many things “off the Rails” Review this example for what I am trying to say.
  • It is probably best with any NEW application, to build your DB in one of the three default DB engines. (SQLite, MySQL, or PostgreSQL) That being said, I had an existing DB and back office applications that were sitting on MS Access and needed to find a solution that easily meshed with that. The compromise was Microsoft’s SQL Server 2017 (installed on Linux)
  • If you are working with an existing DB, there are a few things you will need to be aware of:
    • RoR reserves the field name “type“. So, if you have a field in you DB named “type” you will need to address that before you do any importing or conversions. Alternately, if you cannot change the field name, you will need to add this line to “model” for any tables that include a field “type.”
      self.inheritance_column = "inheritance_type"

      as mentioned here:

    • If you, as I do, use CamelCase (ex: tMyTable or fFirstName) in your DB entity naming, you will not be able to use the automated process for scaffold building described in this article. The automated process will actually change CamelCase to snake_case “fFirstName” to “f_first_name” when creating the scaffold structure. I was able to go back and change these to all lowercase (ex: fFirstName to ffirstname) not as readable, but it works. The alternative is of course to build the scaffold by hand, but that will make the conversion much more difficult. Note: this applies to all naming in your DB including Index’s, and foreign keys.
    • Index names are automatically created in Access. You will probably want to go back and modify/simplify them for better automation in the connection and scaffold building process.
    • Rails is designed to build a DB from the ground-up, it has it’s own set of default functionality that will probably not mesh well with a pre built DB.
      • Rails likes to do all the heavy DB lifting, it wants to keep track or even manage all of your indexes, associations, primary keys, foreign keys, etc. It sees a DB as a dumb data store, with all the logic being cared for in you Rails models.
      • Rails assumes your Primary Key is a field labeled “id”
      • Rails assumes your Foreign Keys look like “mytable_id”, where “mytable” is the name of the table which defines the foreign key field(s), however this can be overridden.

Now the Fun!

After you have installed everything and created your new Rails application, you will need to be in your application’s root directory for Rails Commands to work.

railsuser@myserver:~$ cd railsapp

You will need to edit a couple of files to tell the application to use your SQL Server DB.

Rails DB Settings

Edit the Gemfile to include these two lines:

gem 'tiny_tds'
gem 'activerecord-sqlserver-adapter'

and tell your application where to look for the DB by placing this code in your /config/database.yml file:

   adapter: sqlserver
   host: xxx.xxx.xxx.xxx # IP address pointing to the hardware where your SQL Server is located
   port: 1433 
   database: myDatabaseName  # Name of the DB you are using for the Application
   username: DBAdmin
   password: secret

Note: This is specifically marked as the “development:” environment, changes will need to made to the “production:” settings in this file as well when you are ready to migrate to your production environment.

Alternately, you can make these changes to the “default:” settings, this will cause all the associated “*default” environments to use that.

Rails DB Schema Import and Setup

Review: https://codeburst.io/how-to-build-a-rails-app-on-top-of-an-existing-database-baa3fe6384a0

Now you need to get the schema by running this command:

rails db:schema:dump

This will build the /db/schema.rb file. A surefire way of knowing that you installed everything correctly…

Next, to use the schema_to_scaffold gem type the following:


You will see something like this:

Looking for schema.rb in /home/railsuser/railsapp
0. /home/deploy/railsapp/db/schema.rb

Select a path to the target schema:



You will get something like this:

Loaded tables:
0. table01
1. table02

Options are:
4 for table 4; (4..6) for table 4 to 6; [4,6] for tables 4 and 6; * for all Tables

Select a table:



This will generate scripts for all the table scaffolds. (I found I was unable to use the range options – but that was probably me not typing what it was asking me to?)

Scaffold returns a list of scaffold creation scripts something like this:

rails generate scaffold table01 table02id:integer fieldxx:string --no-migration

rails generate scaffold table02 field01:integer field02:string --no-migration

The “–no-migration” part is important for us. If you create migration files, you are telling rails that you need these DB tables to be created or changed in some way. But we don’t need tables created or modified.

Next we need to run those scripts. If you are using Putty, simply highlight the script for a given table and right click on your mouse. This performs a cut/paste operation. Pressing enter will then run the script and create the scaffold for that table. It’s magic! Running these scaffold generator scripts will create things like “views” (web pages) and their controllers. It will also modify other files, such as /config/routes.rb

Pointing to the Default Web Page

Our next step is to change the default route (Home Page)

place a “root” definition in your /config/routes.rb file just below the “Rails.application.routes.draw do” line similar to this, but use the name of the controller and view you want to use as the root page.

root 'myviews#index'

We are pointing at the controller for the myview views. So the /config/routes.rb file should now start like this:

Rails.application.routes.draw do
  root 'myviews#index'

Now when you enter the url to your page in your browser – http://xxx.xxx.xxx.xxx:3000/ it will show the page you stipulated as your root page.

There is much more to do, but this will get you started.

Irish author Brendan Behan said:  “There is no such thing as bad publicity except your own obituary.”

Today as more and more people and companies join social web networks, everything from Facebook to Linked-In, our businesses are being exposed to publicity, both good and bad.

One enterprising business owner in New York felt like Mr Behan when he rode a rash of bad press and reviews all the way to the top of search engine results. The situation was so embarrassing to Google that they implemented measures to stop this from happening, and in an entry on Google’s official blog, Google Fellow Amit Singhal stated: “I am here to tell you that being bad is, and hopefully will always be, bad for business in Google’s search results.”

( read more here: http://googleblog.blogspot.com/2010/12/being-bad-to-your-customers-is-bad-for.html )

This tells me something very important. Bad press and bad reviews about your business will be bad for your business on the web. First and foremost, I am sure that you as a business owner want to do right by your customers, but I also know issues arise that can get out of control. What can you do about these issues?

1) Deal quickly with all complaints. If your customers come to you mostly on the web, more then likely they demand immediate attention. don’t let emails sit on your desk top, respond quickly and decisively to all inquiries or complaints.

2) If you should receive a bad review, check to see if there is a way to respond to this review. Most reputable sites that allow reviews (not just ratings) will give you an opportunity to address or at least reply to the review. I’m sure I don’t need to remind you to remain professional when writing any replies, but it’s so important, that I will anyway; Remain professional when replying to bad reviews! Also. DO NOT argue back and forth with an irate reviewer, it will only look bad on you.

3) If you or your company is in the wrong, own up to it. While this step will not remove the review, It will show what kind of business you run and will be received favorably by those reading the reviews.


4) Do you make it easy for your customers to contact you? By dealing with unhappy customers on your site you make it easier to control the situation in a more favorable venue.


One last thought. There are companies out there that promise to flood review sites with “good reviews” for your company thus drowning out bad ones. I have seen however that these can and usually do back-fire. The reviews often times feel canned. If I feel I can’t trust this company to play fair with the system, I don’t want to do business with them.

Here for example is what I do when I want to purchase something on Ebay, I check the posters overall rating first. this gives me an idea of their overall trustworthiness. Next I open the reviews themselves and look to see when the most recent BAD reviews were. At this point I could care less about the good reviews. They tell me very little about the company or person I’m going to be doing business with. Then I look to see how quickly and satisfactualy they handled the issues, if at all. I may be pessimistic, but if I see no bad reviews at all, I wonder if this company is for real.

We as business owners have to work for our customers. How well we deal with the unhappy ones tells the world who we really are.

The phrase “Search Engine Optimization” or “SEO” refers to all the things that go into making your web site more visible or rather more appealing  to search engines.

Why should that matter to you? It’s all about traffic, getting people to your site. Ask yourself, “Would you build your store or office somewhere you knew people would never find you?” I ask you, “Why build a website if you know people will not find you even if they type an appropriate phrase in Google or Bing or…?”

Here are a few things you need to know to make your site more visible:

  • Form your site correctly. This statement is a reference to the actual behind the scenes construction of your site. If you don’t know how, get some help.
  • Submit your site to search engines. Let the search engines know you are open for business. They will in turn “crawl” your site to see what’s there, this is referred to as “Indexing your site.” It’s a pretty straight forward endeavor, but can be time consuming.
  • Do some self promotion. Simply put, make sure your current customers and future prospects know you have a site, and what your address or URL is. Place your address on your letter head, business cards etc. Really any time you contact people, make sure they are aware you have a site.
  • Do some self promotion part II. Are you the most knowledgeable person around about your given field? Then tell others about it use social media like blogs and forums to advertise yourself. Not only will you be looking to create and keep active your own blog, but you should also go out and make meaningful comments on others blogs and forums as well. The goal here is to leave behind links to your website. NOTE: Care should be taken not to “spam” or write junk posts on others blogs. it can not only get you black listed on that blog, but also lower your standing with the more reputable search engines.

There is more to SEO, but not much. Give me a call, and we can discuss your needs. It’s always free to bend my ear. But if you like what you hear lets see what Untangle Web can do for you.

I’m sure you have all seen signs along the roads of our town pointing the way to the nearest yard sale. Some of those signs are more effective then others, some are new, others you can tell have been there since the road was paved. Others have a distinct look of being rushed together as if the person running the yard sale suddenly woke up that morning and realized that people may not be able to find them. Some are written so small you can’t even try to read them as you zip by in your car, for fear you may get into an accident.

Believe it or not, your website faces many of these same issues. Even-though you have a website, you may actually be driving people away because some very basic errors were made when it was created. So let’s spend a few moments and look at these.

  • How old does your site look? Why do we have a yard sale? It’s because we are tired of looking at the same old junk, we want a change. Is your website in need of a yard sale? Is it looking tired? How long has your website looked the way it does? Customers need to know that what they are seeing is fresh and up-to-date. Look for clues on your site that would tell a potential customer that you don’t care. Are there copyright dates from years ago? Do you tell them all about that award you received “last week” with a date from two years ago in the story? Make sure that you are reviewing your site regularly for broken links. Nothing says “We don’t care about our site” more then links that go nowhere.
  • Is your site inviting? Why do we go to yard sales? Many times it’s because we are looking for that one special thing that wows us. I can’t tell you how many times I have slowed my car down just enough for my wife to scan the odds and ends on the ground, so she can pass judgment on whether we should stop or not. The casual browser of your site is looking for that too. Is there a reason for the person to be there? Does your site hold a potential customers attention? You have about the time it takes for the person to scan down your home page to grab them. No more then fifteen seconds to tell them that you are special and they have found what they are looking for. So if you have crammed that home page full of words, they are gone already…
  • Is your site usable? If I were putting up a yard sale sign that I wanted a driver to be able to read. I probably wouldn’t have my four year old write it. If I seriously want customers I would make sure the sign did just what I needed to do –just the date and address, big and bold – and looked professional, not in crayon, you get the picture. Is your site professional? There are certain things that a  customer will be looking for on any site. If you have a navigation menu on your site, does it look and work like a menu? You may be the best plumber in town but if someone who just moved into town needs you, does your site scream “I know what I’m doing!” or does it look and act like your four year old put it together?

There are many other things that the space here doesn’t allow us to go over. I’m not a doctor, plumber, or mechanic. I would never think of trying to operate on myself, wouldn’t want to risk flooding out my house, or even dream of swapping out my car’s motor. Think about getting professional assistance in putting your website together. You are the expert in your field, make sure that is what comes across to potential customers who visit your site.

There are many reasons a small company may feel that a website is not for them, usually it is because they don’t know where to turn to get some direction. So I am going to try and open your eyes to the possibilities the web and other technologies hold out to you if you are willing to listen to some free advice…. As a way to introduce myself I thought we would take a look at some rather far-fetched reasons why a small company might opt-out of having a website.

  1. You don’t have any customers or don’t want any. Sometimes this is how it seems to potential customers who are looking for you. Suppose I want to find a local Florist, where am I going to look? I’m going to turn to the web and do a search for florists in Trenton. It’s much easier and safer then risking paper cuts on the yellow pages. If a florist has decided that a web site is not for them, I may miss them altogether. One other nice thing about the web is that I can find information about their reputation as well. What do others think of you. It is in your best interest to place on the web, a site that shows your best side, and showcases your successes.
  2. You feel your customers know too much about you already. One of the first thing I look for on a local company’s website is an “About us” or “Contact Us” page. Usually it’s because I’m looking for a physical location I can go visit. Yes even though I’m a creature of the Web, I still enjoy touching the “merchandise” or meeting face to face with the people or company I will be dealing with. People in general want to know who you are, they want to be able to find these things out with-out jumping through hoops too.
  3. Your customers have never heard of the World Wide Web or are scared of the 21st century. Come on now, who are we kidding? Yes there are some who just don’t want anything to do with the web. There always will be, but keep in mind that the number of those who fit in this category are quickly dwindling. Are these the only people you want to reach? Most companies I know of are looking for the widest possible exposure. Don’t overlook the Web. Another thought to keep in mind is that the target age group for your business should not dictate whether or not you have a website, My mother, who is beyond retirement age, put together her own computer. The first time my preschool aged son spelled out his name was on a keyboard sitting in front of a computer.
  4. All my potential customers know where I’m located. There are very few businesses that can say that everyone in their community knows who they are or where they’re located. Even if you’re establishment has been around since 1612, there are always new customers and potential avenues for growth that may be missed without a Web presence. The sign outside your building probably cost you a small fortune. Why did you put it there? How much effort or money did you put into designing it? Would you think of running your business with out one? How about your business cards? It is safe to say that one of the reasons you have these things is that people expect them, the same can now be said of the Web and a website for your company.
  5. I’m not selling anything. Whether it’s mousetraps or ideas for improving them, you are offering something to others. Blogs have become the information source for many in your community, why not be a part of it? The florist I’m looking for may have spent a few moments of their time to post about the best flowers to give a sick friend or maybe they want to champion a “Beautify our highways with wild flowers!” campaign. As long as the message doesn’t get too militant, these insights into your companies opinions will draw potential customers to your door (or shopping cart.)

Maybe you can come up with a few more reasons why your company still does not have a website. Don’t waste too much time looking for them though, your competitors are snapping up customers that should be yours simply because they have made it easier for people to find them.

Next time I think I might take you on a voyage into the dark and scary world of bad web design and some simple rules to follow when building your own site.

(Please forgive me, but the posting and examples to follow rely heavily on Windows and Internet Explorer. (You can substitute Apple and Linux applications for most.)

Your web browser is a very powerful tool. It enables you to view many different types of files from within the framework of the browser.

For an example:

You can go to www.weuntangle.com/index.html and view my home page. This is expected, as it is a web page after all.

Now go here: www.weuntangle.com/examples/test.xls you will find that as long as you have Excel installed on your computer and are using Internet Explorer, you will be able to view this document “In Browser”

Your browser is capable of some terrific things. But it’s most primitive function is to show web pages, with all their links and pictures. Here is your most basic of web pages:

<head> </head>
<body> </body>

This bit of HTML scripting is very simple. Here are the components:

<html> </html>

This “tag” tells your browser that it is displaying an “html” document.


This tag is where bits of scripting and other tags go that pertain to background information for the browser. For instance you can place a <title> </title> tag in the <head> section and put a title at the top of the browser window.

<body> </body>

This section is where all the content of your page goes.
Now, the fun part. Open “Notepad” and type whatever comes to mind, once completed, save the document on your desk top. Name it “mypage.txt”

Close Notepad and return to you desk top. You should see you new document sitting there. If your desktop looks like mine, you may need to hunt for it.

Now that you see it, double click on it to open it again. What application is used? Notepad of course. Now close Notepad again. This time right click on mypage.txt and select rename on the menu that appears. In the box below your file rename it mypage.htm and hit enter. Windows will try to cover it’s backside by warning you that you could make this file unusable by doing this, but it’s ok. Click “Yes” and lets move on with our experiment.

With that done you should see the Icon that represents your file change to look like your default browser’s icon – that’s what we want, give it the old double click and watch what happens….

WOW! You just created a web page (OK an extremely mal-formed web page.) and without the taggings and sections we looked at earlier. This is because windows has associated the .htm (and .html) extensions to your browser and your browser is so nice that it is going to try and display the file no matter what. Remember that .xls file you opened earlier? Try this:

www.weuntangle.com/examples/test.htm (with Firefox it may complain before opening it)

Ugh! What a mess. What you just open is actually the Excel spreadsheet renamed with the .htm extension, but your browser tried very hard to display the file, simply because you told it to.

We are going to use the browsers ability to render pages to our advantage. The browser is very forgiving when it comes to webpage content, so it will try to render whatever is passed to it if it is named with an .htm or .html extension.

All this being said, Please take the time to learn html (or better yet xhtml) it will serve you well as you take on this serverless intranet project with me.

Note: you may belong to a company that has also locked down the types of files you can attach to emails. If this is the case you can sometimes rename your html and javascript files something like this:

Html file name:

Renamed for emailing:

When you later detach the file you will need to change the name back so you can use it.

Next up Javascript 101

Wow! I got my first two comments on my blog! And it’s only been 5 days that my site has been up….

Hmmm, Being the MAJOR skeptic that I am, I began looking at this simple comment that was left for one of my articles, it was left by someone calling him/herself GlenStef:

“Not sure that this is true:), but thanks for a post.”

Now this comment in particular was not all that funky, nor did it stand out as a particularly off topic thought. It was actually the fact that I had only just opened my site and had done NO advertising. The post that was being commented on had only been there a very short time. So my radar went off and I went over to our friend Google to do a little digging, here’s what I found:

  1. Mister GlenStef has a lot of accounts in some extremely diverse blogs
  2. Mister GlenStef has only a few things to say
    1. Greatings, Ugh, I liked! So clear and positively.
    2. yourSiteNameHere.com – da best. Keep it going!
    3. Hello, Thank you! I would now go on this blog every day!
    4. Everything dynamic and very positively! :) (even the smiley showed up in every place posted.)
    5. Not sure that this is true:), but thanks for a post. (Hey! that’s the one I got.)

    Looking at this next one, I don’t think it’s from the same spamming bot because I didn’t see it posted from GlenStef and it was more complex, but I did see it on several blogs when I was researching this:

    • I found your blog on google and read a few of your other posts. I just added you to my Google News Reader. Keep up the good work. Look forward to reading more from you in the future.
  3. Mister GlenStef appears to have many pseudonyms:
    1. Elcoj – on several sites
    2. Streightepale
    3. Eremeeff
    4. AlexAxe (The site I got this one from was a veritable cornucopia of spam comments)
    5. etc. etc. etc…

All these are marks of a robot in action. Why go to the trouble of making all these posts? It’s a thing called search engine result placement. Most of these blogs include a link of some sort back to the commenter’s  “Home page” the more links to a URL you can get in the most number of diverse places, the more a search engine will view that link as relevant. All those links will (so the thought is) bump the URL up the Search Engine result list, putting more money in the spammers pocket.

As you can probably tell I am new to this whole Blog thing. Perhaps even naive, I don’t know, but I feel there has got to be some way to curtail these robotic spam comments. On the other hand do I really want to? Do all these spam postings from other sites make my article more meaningful on the search engines?

I was surprised to find that it wasn’t just the small little guys like me who were getting these posts and letting them through. Check out the policy blog site for Intel and you will find our friend GlenStef telling them the same thing he told me… I guess I’m in good company:

Intel Policy Blog

If you want to see more of this stuff, go to Google and search on “GlenStef” and “Not sure that this is true:), but thanks for a post”

I think I’ll spend some more time with this subject in the future, til then, enjoy.

Update: Here is a nice link you can follow for more information and some tips on preventing this kind of spam from messing up your blog:  http://en.wikipedia.org/wiki/Spam_in_blogs

Extremely locked down is what we are looking at here. I came up with this topic when I was working with a small department of a large company. They have limited web access, no ability to upload files via thumb drive, and CDs/DVDs are out of the question. So how do you share information, the latest department news etc. without sending emails to everyone? I began to wonder if I could put together an Intranet site for them without access to servers or even external web sites like Google or facebook.

The short answer is: Yes I could. The longer answer is: Yes, you can too, and I am going to help you do it.

What makes this sort of Intranet possible is that your browser (we are going to look mainly at Internet Explorer) is capable of doing some amazing stuff thanks to the power of a Netscape creation called Javascript, and Microsoft’s browser extensions called Active X controls. Most of the work will be done with Javascript, but for the DB access we are going to need Active X.

OK I hear you now. “But I thought you said no servers?” Remember, we are building this Intranet for a small department or Business, and true to my word, NO servers will be used in the building of our website.

The DB that we will be using (and only if you want a more interactive site) is MS Access. If you have it installed on your PC you’re ahead of the game. If not, we will need to get a little more creative, but it is still very doable. (You will not need to go out and get MS Access if you do not have it.)

For an example of what can be done,  zip on over to Joshua Faulkenberry’s site and see what he has created. Come right back though, OK?

Here are some things you will need to make this work.

  • First and foremost you will need a shared location for your files. The company mentioned above has a networked file share mapped as the I: drive on all the departments computers. So if I drop an Excel spreadsheet called “mysheet.xls” on this drive, everyone in the department can get to it by going to: I:\mysheet.xls
  • Next you will need to have some knowledge of, or at least a desire to learn some HTML, CSS, Javascript, and a little SQL. I am going to help you here, so don’t run off just yet if you don’t know a lick of web stuff. I hope to make this a gentle learning curve. For you HTML experts, stick around too, I hope to make this a learning experience we all can enjoy.
  • I would suggest you also become familiar with your company’s technology policies as well. Please don’t do this if you think you will run afoul of these rules and regulations.

As we go along we may run into more things we need. but for now, that’s it. Come back next time for our first look at what an Intranet is for and your first web page.

Well, that was relatively painless. I am now up and running and have a passable wrapping around my brand-spankin’-new WordPress blog. Here are two links I came across that enable you to create pretty nice skins for a WordPress blog site – Did I say cheap?

PixoPoint – Which is the site I used to create the theme I am using as of today.
– or –
Check out Yvo Schaap’s* site for a very easy to use theme generator.

the PixoPoint generator is more flexible – and as usually is the case has a bit of a learning curve if you are not into web development. If all you want to do is put a personal look on your blog then zip over to Yvo’s site. I was looking to make my blog look more like my main site, so I went with PixoPoint (by the way I like their name…) In the end when I am able to spend more time with the back-end of WordPress I will probably create my own theme (More to enable me to get rid of the PixoPoint links, not because I really need to.)

*(If that’s not your name please forgive and correct me)