Gossamer Forum
Home : Products : Gossamer Links : Discussions :

Time to say good-bye

Quote Reply
Time to say good-bye
It was the year 2000, when i met the most wonderful and beloved software i ever has own in my life.
Dont laugh about me, i have tears in my eyes seeing so many years and solutions i have produced in around 18 years.

GL was a wordpress long time before people ever heard about blogs. GT was a shopping-system. GT-was a lot of sites where people, companies or products were shown. And only really less times GT was just an ordinary search engine. Instead of this some of these pages were not alone in the world, they were melted with vbuletin and later xenforo for example, so every link as a person, text, product, city, country had an own thread or sometimes an own subforum for more information and discussion.

I will miss it, and i am not shure, if really should delete the last used engine today, while almost all templates have a php-redirect made - shure how else - with globals that take the title or name or ID to redirect thousands of Google-Links to the new pages that still work with the IDs added by GT, some of them in 2005 and before.

Dear Alex, dear team around, thank you for making my life better so many times, thank you for all the love i had inside working with your engine that was the key or at least a part for almost everything i have produced for the web. Gossamer Threads Links SQL, you was a big part of my life, a big part of my youth and i regret no second to meet and love it.

Good-bye.

Last edited by:

Robert: Feb 13, 2019, 10:17 AM
Quote Reply
Re: [Robert] Time to say good-bye In reply to
Hi Robert,

Sorry to see you leave touching and true words.
I started back around the same time as you and probably have a similar history with GT.

All the best

n||i||k||o
Quote Reply
Re: [el noe] Time to say good-bye In reply to
Hi,

Sorry to see you go. I think I must have started around that time as well. I'm still going strong using GLinks on my own sites, and that of other customers. I love how flexible it is (just a bit of a pain sometimes with utf8 haha)

Cheers

Andy

Andy (mod)
andy@ultranerds.co.uk
Want to give me something back for my help? Please see my Amazon Wish List
GLinks ULTRA Package | GLinks ULTRA Package PRO
Links SQL Plugins | Website Design and SEO | UltraNerds | ULTRAGLobals Plugin | Pre-Made Template Sets | FREE GLinks Plugins!
Quote Reply
Re: [Robert] Time to say good-bye In reply to
Sorry to see you leave. It was a good ride!

Good luck with your new projects!
Quote Reply
Re: [Robert] Time to say good-bye In reply to
Hey Robert,
sorry to see you go Frown

Does anyone of you here, have some suggestions, how to export an gossamer communty and all the links to a wordpress installation?

Thanks

Matthias
gpaed.de

Last edited by:

Matthias70: Feb 16, 2019, 9:34 AM
Quote Reply
Re: [Matthias70] Time to say good-bye In reply to
I will not leave this planet. :)

With UTF i had no problems finally (with you help as i remember).


To import LSQL to wordpress is no big story i think.
You should know your field at both sides, then fetch them and save them.
But before you should know which fields are needed at WP. Maybe it need something special?

My workflow:

1. Install wp
2. Make one new article
3. watch the tables and fields, understand them
4. Write down which field from lsql should be in which field from wp
5. solve problems, if wp needs whatever else
6. Write an importer, it is easy
Quote Reply
Re: [Robert] Time to say good-bye In reply to
BTW: If there is anything we should or could build together, let me know, please.
Quote Reply
Re: [Robert] Time to say good-bye In reply to
There are thousands of interesting projects for building websites to explore and i have tried some of them.

Finally i understand that almost everything is a copy of my beloved lsql.

Now i work again with lsql together with:

zurbs foundation
jquery
pages as .php instead .html

to produce static pages (with dynamic php-functions if needed).
Quote Reply
Re: [Robert] Time to say good-bye In reply to
Hi,

I'm still using GLinks.

1) https://purecss.io/as a base framework for the CSS
2) LESS to compile the CSS (great for modular building, and also stopping extra "junk" being included on pages when its not needed)
3) Vanilla JS using RequireJS to again, load modular scripts (only what you need, when you need)

I've totally got rid of jQuery as its too damn heavy and a killer for page load times. Back in the prime of jQuery it was good - as it dealt with cross-browser issues. However, now you can do it all easily enough with ES6 syntax and then Babel to create non-ES6 versions (which I include on older browsers, but only if needed)

As you say though - almost all the CMS directory systems around now are based on LSQL features, and the template systems I've found not flexible enough

Cheers

Andy (mod)
andy@ultranerds.co.uk
Want to give me something back for my help? Please see my Amazon Wish List
GLinks ULTRA Package | GLinks ULTRA Package PRO
Links SQL Plugins | Website Design and SEO | UltraNerds | ULTRAGLobals Plugin | Pre-Made Template Sets | FREE GLinks Plugins!
Quote Reply
Re: [Andy] Time to say good-bye In reply to
I tried to find anything, but there was less information about how to reduce

jquery

for special needs.

I guess that there are many, many functions i dont need. On the other site you could use an official address to download it and probably a lot of people will have it on their page.

Anyway in the last project i need a js for counting down closing and opening times, so i have found a nice counter with jquery for that.

With glinks the page is much faster than some cmsi have tried also. Unfortunately some of the best cms i know now, dont have a function to produce pages static. The most of them use a cache, but it is still not the same i guess.

On the other site i understand that people dont want to write a global if they can have a nice backend with forms and switches.

BTW: Do you have any idea how to implement an editor in glinks?
It is not really needed, but maybe a nice idea to add something to insert typical things like , , [h2] or [br] to field. Probably i will write a small php to manipulate the main fields with text and formating with such an editor.
Quote Reply
Re: [Robert] Time to say good-bye In reply to
Hi,

While the size is an issue - its also the rendering time as well. For the ready() function to fire on load, you have to wait for the whole of jQuery to be loaded and then init'd. Then, and only then can you start doing DOM manipulation. While this is ok on small sites, it can be killer on any that need to do more than a couple of functions.

I've converted a site that used jQuery for the majority (my own coding, in all fairness), to a VanillaJS + RequireJS setup, and it went from 4.5 seconds to 2.1 (for a VERY large page, with a lot of content). The detailed pages went from 3 seconds to 1.1 seconds (just from the top of my head)

Check out the "Speed Comparison" section here:

http://vanilla-js.com/

Its certainly worth spending some time trying to learn, if you are wanting to speed up your site Angelic

Quote:
Anyway in the last project i need a js for counting down closing and opening times, so i have found a nice counter with jquery for that.

Those are reasonably simple as well :) Maybe 5-10kb worth of JS files and a little bit of CSS:

https://codeburst.io/...ascript-f3cdaae1a1a3

Quote:
With glinks the page is much faster than some cmsi have tried also. Unfortunately some of the best cms i know now, dont have a function to produce pages static. The most of them use a cache, but it is still not the same i guess.

Yes - that was one of the reasons I didn't like Wordpress as a directory system (as well as the fact everyone and their granny is trying to find security holes in Wordpress, which makes it a real job to keep it all patched up ;))

Quote:
On the other site i understand that people dont want to write a global if they can have a nice backend with forms and switches.

Yup. Having programming skills certainly helps. Its a bit like the WYWIWYG editors where you can build your own site with drag and drop. It looks all nice from the front-end - but MAN when you look at the code and the DOM structures they are a TOTAL mess! 20-30 levels deep in some cases.

Quote:
BTW: Do you have any idea how to implement an editor in glinks?
It is not really needed, but maybe a nice idea to add something to insert typical things like , , [h2] or [br] to field. Probably i will write a small php to manipulate the main fields with text and formating with such an editor.

If you are using jQuery, you could just use something like https://quilljs.com/

You can customize which options to show (B, I, U, OL, etc). One thing to be aware of is how they pass the data back to the server (sometimes you have to manually capture the contents when doing the submit(), and store it in a hidden field)

Cheers

Andy (mod)
andy@ultranerds.co.uk
Want to give me something back for my help? Please see my Amazon Wish List
GLinks ULTRA Package | GLinks ULTRA Package PRO
Links SQL Plugins | Website Design and SEO | UltraNerds | ULTRAGLobals Plugin | Pre-Made Template Sets | FREE GLinks Plugins!
Quote Reply
Re: [Andy] Time to say good-bye In reply to
Thank you for the link, i will try it. If i could get rid of jquery it would be nice.
And i still dont understand why people dont cut it in pieces like we do with the css from a library also.
On the other sight there is that argument that most of people have downloaded it already.

About your large page: Why do you produce it? It is needed to have only one page?
When i see the analytic stats i see that some pages have 55% and more visitors using a mobile, from this view i started to make smaller pages and work with less pictures.
Quote Reply
Re: [Robert] Time to say good-bye In reply to
Hi,

The reason I break it up, is due to the amount of features. This is one of the pages in question:

https://www.chambresdhotes.org/...ne_Chambres_D_Hotes/

(GT Metrics: https://gtmetrix.com/...sdhotes.org/SBXLbBKm - the old version of this page used to take between 4-8 seconds to load - depending on how large the category is)

Each time you click on a feature (for example, adding to your favourites, viewing the map, contacting them) , it will load an external module. What you do, is just require it like:

Code:
<script>window.VARS = window.VARS || {};
window.VARS.thisPage = "home_new";
window.VARS.temp_set = "luna";
</script>
<script data-main="/2018/v9/js/decider" src="/2018/v9/js/lib/require.js" async="true"></script>

Then you would have something like this in add.js:


Code:
// check if we need to use the decent "new" scripts, or crappy non-ES6 versions!
// later on when loading the paths we change from "lib" to "lib-non-es6"
function check_es6() {

if (location.search.indexOf('non-es6') !== -1) {
return false;
}

try { eval("`foo`"); }
catch (e) { return false; }

return true;
}

var base_path;
if (check_es6()) {
base_path = "/2018/" + window.scriptVersion + "/js/lib"
} else {
base_path = "/2018/" + window.scriptVersion + "/js/lib-non-es6"
}

var langs_file = "langs-fr";

require.config({
//"urlArgs": "foo=" + (new Date()).getTime(),
//"urlArgs": "",
"baseUrl": base_path,
"waitSeconds": 0,
"paths": {
// "jquery": "jquery",
"app": "../app",
"datepicker": "datepicker/new",
"datepicker-lang": "datepicker/"+ langs_file,
"google_maps": 'https://maps.google.fr/maps/api/js?v=3.34&lang=fr&key=xxxx-ssfYuDsBc&',
"google_maps_detailed": 'https://maps.google.fr/maps/api/js?v=3.34&lang=fr&key=xxx&',
"leaflet": "leaflet/leaflet",
// ...etc
},
"shim": {
"leaflet.markercluster": {
"deps": ["leaflet"]
},
"datepicker": {
"deps": ["datepicker-lang"]
},
"leaflet.markercluster.freezable": {
"deps": ["leaflet","leaflet.markercluster"]
}
}

});



if (window.VARS.thisPage == "home") {

require(['domReady','storage','common-functions','home'], function(domReady,store){

}, function (err) {
console.log("Error: " + err)
});

} else {
// some other page
}

If window.VARS.thisPage == "home", it would then load /lib/home.js

For the CSS - check out :

https://sass-lang.com/

If you don't already have it on the server, check out: https://sass-lang.com/install

Then once you have it set up, you can "watch" it for changes to apply changes:

Code:
cd /home/theuser/thedomain.com/public_html/2018/css/sass
sass --watch /home/theuser/thedomain.com/public_html/2018/css/sass:/home/theuser/web/thedomain.com/public_html/2018/css --style expanded^C

Anyway, that should give you enough to play with. I'd recommend acclimatising yourself to SASS and requireJS. When looking at how to program vanilla JS, just search Google and there are tons of examples / tutorials. What I've done is create helper functions for myself - such as :


Code:
/*!
* Add an event listener
* (c) 2017 Chris Ferdinandi, MIT License, https://gomakethings.com
* @param {String} event The event type
* @param {Node} elem The element to attach the event to (optional, defaults to window)
* @param {Function} callback The callback to run on the event
* @param {Boolean} capture If true, forces bubbling on non-bubbling events
*/
const on = function (event, elem, callback, capture) {
if (typeof (elem) === 'function') {
capture = callback;
callback = elem;
elem = window;
}
capture = capture ? true : false;
elem = typeof elem === 'string' ? document.querySelector(elem) : elem;
// console.dir(elem);
if (!elem) return;
elem.addEventListener(event, callback, capture);
};


function handleEvent(base, evt, selector, handler) {
var els = document.querySelectorAll(selector);
for (var i = 0; i < els.length; i++) {
els.addEventListener(evt, handler);
}
}

// Show an element
const show = function (elem,what) {
if (typeof elem == "object") {
if (typeof what == "string") {
elem.style.display = what;
} else {
elem.style.display = 'block';
}
} else {
// need to look it up first
var elem = document.querySelector(elem);
if (elem) {
if (typeof what == "string") {
elem.style.display = what;
} else {
elem.style.display = 'block';
}
}
}

};

// Hide an element
const hide = function (elem) {
//console.log("hiding",elem);
if (typeof elem == "object") {
elem.style.display = 'none';
} else {
var elem = document.querySelector(elem);
if (elem) {
elem.style.display = 'none';
}
}
};

// Toggle element visibility
const toggle = function (elem,what) {

if (!what) {
what = "block";
}

// If the element is visible, hide it
if (window.getComputedStyle(elem).display === what) {
hide(elem);
return;
}

// Otherwise, show it
show(elem,what);
};

// set and get height for element
const height = function(elem,size) {
if (elem && size == null) {
// just return the height of the element
return elem.style.height;
} else {
// looks like we want to SET the height - so do this here
object.style.height = size+"px";
}
// object.style.width
}

// height of the element, inc padding etc
const heightOuter = function(elem) {
if (elem) {
return elem.clientHeight;
}
}

// width of the element, inc padding etc
const widthOuter = function(elem) {
if (elem) {
return elem.clientWidth;
}
}

// height of the element, inc padding etc
const heightInner = function(elem) {
if (elem) {
var style = window.getComputedStyle(elem, null);
// console.log(style);
return parseInt(style.getPropertyValue("height"));
}
}

// width of the element, inc padding etc
const widthInner = function(elem) {
if (elem) {
var style = window.getComputedStyle(elem, null);
return parseInt(style.getPropertyValue("width"));
}
}

const isInViewport = function (elem) {
var bounding = elem.getBoundingClientRect();
return (
bounding.top >= 0 &&
bounding.left >= 0 &&
bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight)
// this bit seems to break the filters bar, so having to comment out :(
//&&
//bounding.right <= (window.innerWidth || document.documentElement.clientWidth)
);
};

const triggerDo = function(elem,what) {
//elem.dispatchEvent(new MouseEvent(what));
elem.focus();
};

const toggleClass = function (e,theClass) {
e.classList.toggle(theClass);
};

const removeClass = function (e,theClass) {
e.classList.remove(theClass);
};

const addClass = function (e,theClass) {
e.classList.add(theClass);
};


Cheers

Andy (mod)
andy@ultranerds.co.uk
Want to give me something back for my help? Please see my Amazon Wish List
GLinks ULTRA Package | GLinks ULTRA Package PRO
Links SQL Plugins | Website Design and SEO | UltraNerds | ULTRAGLobals Plugin | Pre-Made Template Sets | FREE GLinks Plugins!
Quote Reply
Re: [Andy] Time to say good-bye In reply to
I avoid any js, when it is possible in own pages. So i dont have any big experience with that.
Sometimes i need something special, then i look for it and try it. But anyway this is something i have to care over time and i dont like this pressure that maybe the newest iphone,ipad, whatever needs an update or an older one needs a trick.

With your page i understand the problem now. Anyway personally i dont like theses js-neverending-loading; in real live it makes always problems to me on many sites. So i like to have real pages to click next and previous, but this only me personal feeling about that.

For css, i have zurb's foundation with the usual tools "watch" and "build"; i have cleaned some files a little to make it faster, while i dont need all of their functions. More or less, i need the grid, and shure there are many others, but it is ok for me. The js from them i dont use. Yesterday i need an accordion and solved it with some small js directly in the source instead of jquery and foundation.js.
Quote Reply
Re: [Robert] Time to say good-bye In reply to
Cool - well its whatever works for you :)

All I'm saying, is try and avoid big libraries such as Font Awesome (you can make your own custom sets using fontello.com, which are much faster to load), and jQuery/ Bootstrap etc. They are all nice in themselves, but if you add them all up they can add a huge load on the browser / page size / rendering time (which is bad for SEO, and users)

Cheers

Andy (mod)
andy@ultranerds.co.uk
Want to give me something back for my help? Please see my Amazon Wish List
GLinks ULTRA Package | GLinks ULTRA Package PRO
Links SQL Plugins | Website Design and SEO | UltraNerds | ULTRAGLobals Plugin | Pre-Made Template Sets | FREE GLinks Plugins!
Quote Reply
Re: [Andy] Time to say good-bye In reply to
For some icons i use normally https://icomoon.io/

...

It seems to me that http://fontello.com/ is just the same way than icomoon. We get css and some font-files.
While is use software from others there is always font-awesome build in and i dont want to change the whole templates for another solution like another font. Anyway with the next update it starts from beginning.
So what i want to have, but never searched for till now, is font-awesome reduced to the icons i need.
Is there anything like that with using the css/templates like they are?
Quote Reply
Re: [Robert] Time to say good-bye In reply to
Hi,

As far as I can see, https://icomoon.io/ is not the same. Fontello actually lets you pick and choose the icons you want to use (it then builds a custom woff/svg/ttf file, the CSS, etc etc). The idea is that if you only want 10 icons - you can do it.

Personally though, I tend to use CSS sprites if you don't have too many icons (as they are much nicer in terms of file size, and processing power to render them)

Quote:
So what i want to have, but never searched for till now, is font-awesome reduced to the icons i need.
Is there anything like that with using the css/templates like they are?

Ahem.,.. fontello.com Whistle

Cheers

Andy (mod)
andy@ultranerds.co.uk
Want to give me something back for my help? Please see my Amazon Wish List
GLinks ULTRA Package | GLinks ULTRA Package PRO
Links SQL Plugins | Website Design and SEO | UltraNerds | ULTRAGLobals Plugin | Pre-Made Template Sets | FREE GLinks Plugins!
Quote Reply
Re: [Andy] Time to say good-bye In reply to
I ment that the idea and the workflow is the same.
You choose icons, you download web-fonts, you use the css.
And if you compare the css-files, you will see, that they look like brothers. :)

Anyway i dont know what awesome finally is, maybe the same?
A webfont with css?

Then it should do the trick to use fontello and rename the css, because at the moment it looks like this:

.icon-star-empty:before { content: '\e803'; }

while ico-moon looks like this
.icon-club:before { content: "\ea13";
}

both you use with something like: <span class="icon-club"></span>

but font-awesome looks like this:

<i class="fa--xf far fa-paint-brush" aria-hidden="true"></i>

but after checking the source-code, awesome seems to be also a webfont.


So the only thing to work-out would be the names in the css-definition, because i dont wat to change the templates with typicall "fa--xf far fa-something".

I guess somehwere should be a page to have the original syntax and a reduced font. That would be the best way for me as long i use (updateable) templates from others.

For my own things i use icommon as said before.
Quote Reply
Re: [Robert] Time to say good-bye In reply to
Hi,

All of them will be font files for creating them :)

Personally I use a program called "glue" that puts all my icons into a single sprite image (https://glue.readthedocs.io/en/latest/ ). I just run this on my server, and it creates a new sprite based on the images I have in the folder I provided. This has proved a real time save, and also cuts down on the number of file requests.

Cheers

Andy (mod)
andy@ultranerds.co.uk
Want to give me something back for my help? Please see my Amazon Wish List
GLinks ULTRA Package | GLinks ULTRA Package PRO
Links SQL Plugins | Website Design and SEO | UltraNerds | ULTRAGLobals Plugin | Pre-Made Template Sets | FREE GLinks Plugins!
Quote Reply
Re: [Robert] Time to say good-bye In reply to
Lets talk about real sex!

It is late in the night, i cant sleep, i think about glinks and so many tries to build a better site in 19 years.

My biggest problems with glinks was to have user generated content. As long i was the only one who adds or updates a link i could use glinks for almost everting. But when users changed anything i had a problem.

a) to show a preview
b) to show changes immediately

Because of this i had
a) a cron job every hour
b) pages with php to show dynamic content
c) later own php forms to edit content


Just a minute ago, i had another idea:

Imagine we use glinks as a classified script. You have some fields for title, text and also price and more things. You have an upload script with cutting and resizing images and we save .php instead of .html.

a) To have a nice text we need an editor for people at least with b, i, h2
b) a nice way to drag and drop pictures, which one is the thumbnail for category, which sort for the pics
c) more?

And now for the real time stuff:

After sending the final post, we have to build detailed, category and home automatically, but maybe this needs to much time?
Imagine a category with 2154 links.
OR
we could save only the detailed page with a php code to show the content dynamically till we have the cron job every hour for a real build?
But so we still have the wrong category page and home.

Maybe it is possible to set markers around everything and replace only the needed part after saving? Regex start-id till end-id ...
But for this i would need to know at which category page we have the linkid 3245.
Maybe we could save the position and/or the page also to know about?

As long the thumbnail has always the same name thumb-linkid.jpg we dont need to update html.


Why all this? Because you need really a long time to build some thousands of links, especially if you had more than one detailed page. Sometimes i had four or five detailed pages for one link, sometimes i had them in more than one language.

Someone has had a plugin to build extra pages, not for links, just for imprint, contact page or things like this. Is this a plugin from you, Andy?

For screenshots, another problem for years - you cant imagine how many times i tried different solutions - we have a solution now with pagespeed.


Comments, reviews - should be added/edited in real time. Maybe also with open file, regex, save file, means ajax, yes?

Anything else?

Finally just for more ideas, i sea:

1. original concept, means every add/edit is watched, validated, build.
2. i do the content and sell flowers for example
3. i build for someone else, who should not enter the admin area, solved with a cron, but means no realtime edit for this client.
Better would be an update build after final save (with a checkbox for example while save a link) or a new area for editing and update build.
4. Many people ad/edit content, here we need a better way like tried above

Work with pictures with js, jquery
Work with uploads like pdf
Work with an editor for lightweight html-tags

Also a history-function for all fields (and maybe pictures?) would be nice. Pictures could be uploaded, but not published for example.

Also it would be nice to have ajax forms (did you ever hat all countries and all major cities in one select form!?),
and it would be nice to have forms with more than one page with saving after every part or different forms after a decision on a page before.
And with a preview at anytime.


Changing a category could be done also by ajax in steps like continent, country, city.

Set a link to pause.

Set relations between links if you like this article, see also ...

Tagging with keywords and a cloud with keywords is nice also.

A solution for links in more than one category is needed. How show the correct breadcrump?
Building a page three times or have three breadcrumps inside source called by a var?

Searching by text, searching with a non shown field with keywords?

And what is about searching for multiple keywords? I remember that i have added the names of all cats a link was inside to a non viewable textfield indexed for search.

Also i had a search form where you could choose four keywords! but in real you have choosen possible cats.

What is about typicall searches like in shops today?
you have attributes to click and the content changes immediately

dogs
bigger ones
hungry ones

people love this much more than a search for bigger hunry dods in a text field?

Ajax rating, ajax reviewing in cats also or instead.

Ajax editing at the detailed page and/or cat page.

Word filter, url filter before saving.


Fetch screenshots by pagespeed, but set links to check if the screenshot fails (404 eg)


I am really shure that i have forgotten something important, but maybe i am tired enough now to sleep. All this and much more was my life for 19 years with glinks. Some things i have solved, other never with 100% or only with php and dynamic queries.


Maybe, Andy, we start to solve one or two things from my list together and build something just for fun?

Good night.
Quote Reply
Re: [Robert] Time to say good-bye In reply to
Hi,

Nice! Although, I don't have time to take anything else on. I'm already running at 150% on projects, and I'm burning out on those :/

Cheers

Andy (mod)
andy@ultranerds.co.uk
Want to give me something back for my help? Please see my Amazon Wish List
GLinks ULTRA Package | GLinks ULTRA Package PRO
Links SQL Plugins | Website Design and SEO | UltraNerds | ULTRAGLobals Plugin | Pre-Made Template Sets | FREE GLinks Plugins!