[MoinMoin Wiki] Show only specific pages in RecentChanges page - macros

How can I restrict the RecentChanges page in MoinMoin that only specific pages would be listed.
Since I have a huge Wiki site and pages are organized in a hierarchical way, I would like to let RecentChanges page show only limited pages according to different hierarchical page paths.

That's not possible with moin 1.x.
There is even a little reason for it (which might not apply in your case maybe, but applies in the general case):
Wikis live from so-called soft-security: people are seeing changes via RecentChanges and will look at them, reverting any bad changes they see (e.g. spam, malicous edit, stuff gone wrong, people playing around at wrong places, etc.).
If you reduce what they see, soft-security gets degraded as everybody is just looking at his own stuff.

Related

How far to go with Structured Data Markup?

The more I am going into the depths of structured data makeup, the more complex and detailed it seems to become. One could even markup areas of the page like footer, header, sidebar, single menu elements etc., I guess a page could easily consist of 80% schema markup and 20% content when taken too seriously. :)
Is it really doing any good to add more than a rough markup skeleton (WebPage or Article) to the potentially hundreds of actual content pages of a website, and shouldn't one only include full author information along with business opening times, contact details etc. on a dedicated contact/business information page? I'm concerned about the bloat. Which kind of markup is recommended for certain types of pages and which of it can be left out because a search engine would compile the information from other parts of the website anyway?
If you only care about user-visible search result features in big seach engine services (e.g., Bing, Google Search, Yahoo! Search and Yandex, which all happen to sponsor Schema.org), the answer is easy: Provide what search engines document to recognize.
Are these user-visible search result features the only things search engines "do" with Schema.org structured data? Probably not. They’ll likely use structured data to better understand page content, and most likely to analyze what other features they could offer in the future. See for example Dan Brickley’s (he is Google’s Schema.org representative) posting about this. But all this is typically not documented by the search engines, of course. So if you care about this, too, the answer would be: Provide what is conceivable to be useful for search engines.
Are search engines the only consumers interested in Schema.org structured data? No, there are countless other consumers (services as well as tools). Enter the world of the Semantic Web and Linked Data. If you know and care about a consumer, the answer is easy again: Provide what this consumer documents to support. But you can’t know them all, of course. So if you care about all these (known and unknown, currently existing and still to appear) consumers, the answer would be: Provide what is conceivable to be useful for all consumers. Or, because the interest of these consumers varies widely, even: Provide what you can.
That said, there are certainly Schema.org types which are rarely useful to provide. A good example are the WebPageElement types, which, as you mentioned, can get used for page areas (header, footer, navigation, sidebar etc.). In my opinion, a typical web page shouldn’t provide these types.
If you care about file sizes, you’ll want to use Microdata/RDFa (because these syntaxes allow you to annotate existing content) instead of JSON-LD (because this syntax requires you to duplicate the content). With RDFa you’ll probably even save slightly more compared to Microdata.
However, structured data typically only represents a fraction of the markup/content anyway, even if you provide as much data as possible.
Instead of repeating "background information" on every page (for example, the full data about the business), you can make use of references: you define a URI for your business (or every other thing) on the page where you fully describe it, and use this URI as property value where applicable on other pages. This is possible with #id (JSON-LD, see an example), itemid (Microdata), and resource (RDFa). The only reason not do this is possibly lacking consumer support for such references (depending on the consumer / the use case, they might not get followed). A middle way might be to provide the item (about the business or any other thing) on every page, once with the full data, and in all other cases with a limited set of data (ideally what is visible on the page, or what is needed for a specific consumer). The URI gets used as identifier for each item, conveying that all these items are about the same thing.

Extracting data from background - Facebook

I am inspecting a page on Facebook now. These describers indicate that some interesting data is being gathered on the users, but I can't find it.
Is there a way to extract the data? (i.e. userborn, males, females, gpslocation) from the response below:
["user","page","group","app","event","friendlist","shortcut"],"browse_functions":{"intersect":{"numParamsUnbounded":true,"minNumParams":1,"maxNumParams":100,"allowsFreeText":false},"fuzzy-intersect":{"numParamsUnbounded":true,"minNumParams":1,"maxNumParams":100,"allowsFreeText":false},"union":{"numParamsUnbounded":true,"minNumParams":1,"maxNumParams":100,"allowsFreeText":false},"fbids":{"numParamsUnbounded":true,"minNumParams":1,"maxNumParams":100,"allowsFreeText":false},"story-fbids":{"numParamsUnbounded":true,"minNumParams":1,"maxNumParams":100,"allowsFreeText":false},"all":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"pages":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"users":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"present":{"numParamsUnbounded":false,"minNumParams":0,"maxNumParams":1,"allowsFreeText":false},"past":{"numParamsUnbounded":false,"minNumParams":0,"maxNumParams":1,"allowsFreeText":false},"future":{"numParamsUnbounded":false,"minNumParams":0,"maxNumParams":1,"allowsFreeText":false},"ever":{"numParamsUnbounded":false,"minNumParams":0,"maxNumParams":1,"allowsFreeText":false},"ever-past":{"numParamsUnbounded":false,"minNumParams":0,"maxNumParams":1,"allowsFreeText":false},"class":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":2,"allowsFreeText":false},"date":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":2,"allowsFreeText":false},"after":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":2,"allowsFreeText":false},"before":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":2,"allowsFreeText":false},"duration-past":{"numParamsUnbounded":false,"minNumParams":2,"maxNumParams":2,"allowsFreeText":false},"duration-future":{"numParamsUnbounded":false,"minNumParams":2,"maxNumParams":2,"allowsFreeText":false},"users-age":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":2,"allowsFreeText":false},"users-younger":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":2,"allowsFreeText":false},"users-older":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":2,"allowsFreeText":false},"users-born":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":2,"allowsFreeText":false},"users-interested":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"users-named":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":true},"users-birth-place":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":2,"allowsFreeText":false},"females":{"numParamsUnbounded":false,"minNumParams":0,"maxNumParams":0,"allowsFreeText":false},"males":{"numParamsUnbounded":false,"minNumParams":0,"maxNumParams":0,"allowsFreeText":false},"members":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"friends":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"online-friends":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"non-friends":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"acquaintances":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"close-friends":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"restricted-friends":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"followers":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"users-followed":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"creators":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"admins":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"contacts":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"groups":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"non-groups":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"groups-privacy":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"groups-named":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":true},"groups-about":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"communities":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"communities-named":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":true},"relatives":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"siblings":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"brothers":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"sisters":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"parents":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"fathers":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"mothers":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"children":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"sons":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"daughters":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"aunts":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"uncles":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"nieces":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"nephews":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"cousins":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"grandchildren":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"grandsons":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"granddaughters":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"grandparents":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"grandmothers":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"grandfathers":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"stepsiblings":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"stepsisters":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"stepbrothers":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"stepparents":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"stepfathers":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"stepmothers":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"stepchildren":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"stepdaughters":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"stepsons":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"sisters-in-law":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"brothers-in-law":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"fathers-in-law":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"mothers-in-law":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"sons-in-law":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"daughters-in-law":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"partners":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"boyfriends":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"girlfriends":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"users-any-relationship":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"users-dating":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"users-relationship":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"users-open-relationship":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"spouses":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"fiances":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"users-its-complicated":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"users-civil-union":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"domestic-partners":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"wives":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"husbands":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"students":{"numParamsUnbounded":false,"minNumParams":0,"maxNumParams":7,"allowsFreeText":false},"employees":{"numParamsUnbounded":false,"minNumParams":0,"maxNumParams":5,"allowsFreeText":false},"major":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"degree":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"job":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"schools-attended":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":4,"allowsFreeText":false},"school-location":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"high-schools-attended":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":4,"allowsFreeText":false},"colleges-attended":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":4,"allowsFreeText":false},"grad-schools-attended":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":4,"allowsFreeText":false},"employer-location":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"employers":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":3,"allowsFreeText":false},"residents-near":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":4,"allowsFreeText":false},"home-residents":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":2,"allowsFreeText":false},"hometowns":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"residents":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":2,"allowsFreeText":false},"current-cities":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"current-regions":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"current-countries":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"users-of-nationalities":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"nationalities":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"speakers":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"languages":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"likers":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"exact-page-likers":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"job-liker-union":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"listeners":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"readers":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"watchers":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"actors":{"numParamsUnbounded":false,"minNumParams":2,"maxNumParams":2,"allowsFreeText":false},"page_raters":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"commenters":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"users-religious-view":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"users-political-view":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"admirers":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"religious-views":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"political-views":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"visitors":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"users-checked-in":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"places-checked-in":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"places-visited":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"recent-places-visited":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"places-recommended-for":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"places-reviewed":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"pages-in":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"places":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"places-in":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"places-near":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":4,"allowsFreeText":false},"places-liked":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":false},"places-named":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":true},"places-near-address":{"numParamsUnbounded":false,"minNumParams":1,"maxNumParams":1,"allowsFreeText":true},"gps-location":
Sorry, but there isn't any information in there. You just copied past some bunch of useless codes.
There is no hidden information, those hashes are only used for their needs, and there's nothing we can actually do to fully analyse it.
Well, we can obviously parse those data, but what will it serve to? You don't even know what does for instance numParamsUnbounded means. What do you want to do when you got it parsed? You'll just got the same thing.
Between, it's not HTLM, but HTML, and this code isn't even HTML.
#Jake_Mill22 these are parameters utilized on the Facebook Graph and it's search. It's basically a graph traversal-based search that goes on behind the scenes, and is also based on Set theory. Your search consists of some filterings on entities (people, places, pages, groups, etc) by their semantic relationships to one another. For example:
https://www.facebook.com/search/str/rock%20music/pages-named/likers/str/stack%20overflow/pages-named/likers/intersect
Says show me all people who both like pages on Facebook with "rock music" in their names who also like other pages with "Stack Overflow" in their names.
You can put together some pretty interesting queries. Check out here for more info here:
http://booleanblackbelt.com/2015/02/important-facebook-graph-search-developments/

Detecting changes in a web page's content

I'm looking for an approach (not a library or framework, as I can't seem to find one) to detecting changes in a web pages content. I've taken a look at posts similar to Tracking changes to web page content, and white papers (http://shodhganga.inflibnet.ac.in/bitstream/10603/2415/14/14_chapter%205.pdf), but having trouble figuring out a good approach.
I don't believe an md5 of a page's content is useful, as the content of most pages change slightly depending on when you request it (eg. if they hardcode the day's date).
Additionally, I'd like to figure out a way to determine what content has actually changed (eg. running a diff on the content that is seen as different is good enough, but I would first need to figure out which content is different).
http://www.changedetection.com/ seems to do a solid job of this.
Any approaches or ideas or links would be appreciated.
Thanks.
The HTTP Last-Modified and ETag headers may be a way to go. However, if the web pages you crawl do not implement them, you are left with text similarity detection.

From the two approaches I list, which one is better for CMS page management and why?

Here are the two scenarios:
First one: You have a CMS you log into go to the page manager, select a template, then add a page into the system, edit the page, save it done.
Second one: You sign in, then go to the URL you want to exist but doesn't exist yet but still shows up as a template to enter in stuff. For example, "/articles/article" and since the URLs were mapped to be dynamic, the article template shows up and has the placeholders to edit right there. Different types of pages or templates would be mapped to different URL patterns such as "/product/[product-number]" etc etc.
Is there any security concerns for doing the latter since I like the second one better in terms of programming as there is no management of pages, just authentication then navigating to the desired page. The first one is more structured and is good listing them out or individiual permission settings.
Please advise.
Beyond the authentication considerations, I think both approaches are fine. I see them as ultimately accomplishing the same thing through different user experiences. To answer the question, I would paper prototype each, then pull users into a room and perform a quick / informal usability study, giving them tasks such as "create a page with ..." etc. Evaluate which model performed better. You really should answer this question by including the users that will use the system.

How to create a deliverable for a front-end engineer?

This is a question about the development workflow of front end engineers. I am starting a project for a rather large site with lots of pages, each page has multiple steps, and it's very difficult to lay out all the content in a spreadsheet.
The content of each page will be delivered in a spreadsheet cell, and some pages have multiple variable section that are determined by user's preferences.
I was asked my opinion about how to structure the deliverable. I am wondering if there is a best practice out there for structuring this kind of deliverable? Because when you have a poorly structured deliverable it can be almost as mindnumbing as using pen-and-pencil to write code.
Do you have any tools, formats, practices for creating deliverables that are easy to work with?
It sounds like you are just doing the UI design and then giving it to the front-end engineers.
If that is correct, I would suggest that you see if you can do the rough html/css work to get the page to look as you want, and then they can go in and give it the functionality, but that way you have an idea what is possible.
You can do much of the work, then leave comments about trying to center something a bit better, for example.
I am not a big fan of just getting the design on paper or as an image, it would be easier to just get the html/css.
There are plenty of tools now that make css and html easy to do, even if you have the css inside the html, they can separate the two, but, it would be a huge help to the designers.
Just do one page, and give it to them, and then come back in a day or two and get feedback as to what their thoughts are, and how you can improve what you give them.
As you go through this process, after a while both groups will know what to expect and you can get the rest done quickly.
This is more of an agile methodology with the front-end engineers as your customers.
My suggestion would be mockups or wireframes for the pages. Mockups would be examples of the pages in various states while the wireframe is a detailed document of the structure of the page.
HTML and CSS is way too complicated for mockup use. I usually first create a requirement backlog for UI/functionalities as well (just a list of priorized reqs in Excel).
Especially for a large site development you should also have the process and data flow definitions done (UML or other way of description) to help you define the mentioned requirements.
Based on these you will know what kind of steps does the whole site funcionality need (i.e. pages) and what the page hierarchy and structure will be like. This way it's much easier to get a grasp of the whole thing.
After that we'll create fast wireframes and visualize the end result with fast mockups done as images with Photoshop or similar. These are absolutely vital in my experience as it helps the customer (and other stakeholders) to actually understand what is beind done. For this the html and css are simply too slow to run multiple iterations with.