i couldn't find any info on this anywhere.
i have a setup of users and items, where the items could became outdated pretty fast (in days). this means, i cannot show those items anymore, since the customer (who sells items) has no credit left and we don't know whether he plans to continue working with us (by charging more credit).
but i want to keep the user-items settings, because it is still valuable and the results are good. i'm afraid, that when getting e.g. 20 recommendations for a user, 15 out of 20 recommended items could be outdated.
is such a situation covered within mahout/myrrix, or do i have to implement my own filtering method via rescorerProvider (setting higher threshold for active items) or simply get 40 recommended items and filter first 20 of them which are still active?
there's one more solution that comes to my mind - erase old items from the user-item preference and put them as tags via the method http://myrrix.com/rest-api/#setusertag
That situation is not explicitly covered by either, in both you will have to introduce some custom logic.
Either solution you described should work (rescorer or generating more). However in my Myrrix you can use the pluggable CandidateFilter
I'm not so sure about the tagging trick, it might work since the tags act as pseudo users or pseudo items.
Related
I'm trying to improve the schedule spreadsheet for the café I'm working at.
Our employees can be baristas, bartenders, or both. I made a table with checkboxes for that. That's the Employee list tab.
In the Schedule planning tab we specify which days in a given month we can come to work. Sometimes people can work both morning (AM) and afternoon (PM) shifts in the same day, but not always, so it needs to be specified too.
In the Finalized schedule tab our manager would split the shifts among employees manually, which is the most complicated and time-consuming part of the whole process. They would constantly switch between tabs, checking who can work which days and shifts, then juggle with what's available. Needless to say, there's plenty of room for error there and sometimes it's quite a mess.
I would like to automatize it a little bit. I know a little about spreadsheets, but can't figure out a few basic things here to even get started. I suppose my main issue is "connecting" several individual cells - to get a particular result only when their values correspond correctly.
I would be eternally thankful for tips on any of the following points.
(There's also going to be a calculator for hours worked in another tab, but I've already sorted that out.)
https://docs.google.com/spreadsheets/d/18W1ScIDT0e7A7esOwnTkvIVtWzoOkMPo6pfqkTVLn7E/edit#gid=1743092005
I imagine the tabs feeding into each other in the following manner:
Employee list tab would serve as the foundation for the rest of the sheet. The other two tabs would pull employee names out of it (to avoid typos and subsequent errors, especially in the hour calculator tab), as well as their roles.
In the Schedule planning tab, the only thing I have troubles with is automatically generating new sections for each employee. The sheet linked above is obviously faux, there's many more people working at our café and people often come and go, so it would definitely save time if a horizontal list of names from Employee list (B3:B) could be generated into (C1:1) of Schedule planning. Is that possible?
Other than that, what's crucial here is the date (B3:B) and shift (C2:C).
The last tab is the most complicated. This is what our manager sinks hours and hours into.
As you can see, for each day, there's up to six slots available - three per shift: one each for baristas and bartenders, and then one more in case an extra pair of hands would be needed on that particular day/shift. This extra slot can be filled out by anyone available regardless of their usual role.
Ideally, I would like to have a dynamic dropdown list in each slot that would pull data from the previous two tabs. The criteria are as follows:
Name is pulled from Employee list (B3:B).
Role is pulled from Employee list (B3:C). For example, John is a barista, so he should appear only in Barista and Support slots; Bill, on the other hand, can appear in any slot.
Date is pulled from Schedule planning (B3:B). For example, Patrick should only appear available in the March 1, 4, 6 and 9 slots (and also only in the Bartender slot, as that is his role).
Shift is pulled from Schedule planning (C2:C). For example, if we would need a barista to work in the morning on March 4, the dropdown list would contain only Cathy and Bill, as they both fill the role and are available for the AM shift on that day.
Additionally, if a person has already been selected from the dropdown list, they shouldn't appear in the other two dropdown lists for that shift, even if they satisfy all other criteria. For example, if Bill appears in D16 (Barista, March 8, AM shift), he's "taken" and can't work any other role at that moment. (In other words, the same person can only appear once on the same row. I'm not sure it can be done via dropdown lists, but perhaps color formatting would do.)
I understand it's quite a project I need help with, but I'm really stuck here and don't know where to begin. My hope is that for some of you it might also be a fun game figuring this out with me.
Thanks a lot to whoever can contribute to this in any capacity.
So I'm building an ecommerce project in Rails that uses dynamic pricing for the items - purchasing something increases the price, and when an item isn't purchased for a certain amount of time the price drops.
I could do this manually at an arbitrary but consistent time, but I would really like to run at least the checking automatically. So far the only automation libraries/tools I've found for Rails have been test related, and because this relates directly to resources in Rails, I wasn't sure it made sense to search for a way to do this in Python.
In my project, the resource is called a Purchase and has relationships to the User and Item objects. What I envision is being able to search through all Purchase objects created in the last 24 hours. Doing it the other way round (going through all Items and their associated transactions) seems like a runtime nightmare, so I assume that's not even an option.
I'd be happy to post any code that would help. Thanks!
you have after_create callback ActiveRecord where you can increase the price. How to reduce price is more complex question, you need a job to run periodically and check for all Purchases.
How to get all related resources Shannon described quite well.
I'm looking for a work-item-tracking/bug-tracking system (or JIRA plugin, or TFS plugin, or...) which makes it easy to stack-rank work items without having to manually assign priority values to each work item.
Instead, our team wants to be able to see a list of open work items and be able to drag-n-drop one or a multiple selection of work items until the order matches the team's prioritization. This would be much easier than arguing about priority numbers and dealing with ties (e.g. "which of the 5 bugs marked priority=2 should I work on today?").
Our team is considering switching work-item-trackers (we use Gemini now) and availability of a good drag-n-drop prioritizer is high on our requirements list.
I realize drag-n-drop ranking is non-trivial because no team will stack rank all work items. Instead, we'll want to take a subset (e.g. work items for one sprint sprint or iteration, or bugs assigned to one developer) and stackrank those, then later look at a different subset and stackrank those, etc. And I'm sure we'll sometimes need to mix and match different stacks, so there'd need to be heuristics (ideally configurable) about how to show a stack of items previously stacked separately.
Pivotal Tracker is close to the drag-n-drop UI I'm thinking of from a UI perspective, but Pivotal's model of separating user stories from the underlying work items (plus a few other issues) doesn't match how we want to work. We don't want to have to deal with different artifacts (stories vs. JIRA/BugZilla work items)-- instead we just want a drag-n-drop UI to automatically fill out a "priority" field in the issue tracker, and which we can use later when sorting and filtering. And we wouldn't want to use Pivotal as our only work item tracker, because it seems to lack common features like bulk editing which are critical for large projects.
Anyone know of a tool like what I describe above?
Urban turtle is the best TFS add-on, making ranking/prioritizing a sane activity. Priority by number is a disaster so don't think you're alone there.
http://urbanturtle.com/
Urban Turtle is updated every month and used by quite a few teams including a number of my teams.
Eylean Board has what you are looking for. They offer a task board where the tasks are prioritized by moving them around, the priority tasks being on top. Interface is nice and clean and they offer other features such as integration with TFS, reports, etc.
The greenhopper plugin for JIRA has this feature. It's worked well for me ...though I'm not a big fan of JIRA in general.
http://www.atlassian.com/software/greenhopper/tour/backlog-management.jsp
Previous to this, I just used excel.
One of the best (and fastest) web UI's I've seen is on AgileZen, which supports something similar to this. Last I knew it did not have built-in integration with TFS, but it does have a REST API. It's basically a web-based, shareable Kanban board.
When a user is viewing a paged table and requests it to sorted by a particular column, what page is shown?
Is there a standard expected behavior for this scenario? I can imagine several possible outcomes, but want to know if there is a standard.
You mean which page to show among the n pages in the table? There are no good options –any possibility is likely to be disorienting and frustrating for the user precisely because there is no standard and no particularly good reason to chose one option over the other. If you were to test users, I doubt they’d have consistent expectations. Even the same user may expect different things at different times. Paged tables also provide relatively weak feedback on the current location in the table so it’s hard for users to understand where they are after sorting whatever option you use. Usable sorting is one reason paged tables are inferior to scrolling tables.
Of the possibilities:
If you have a way of showing a currently selected or focused item (row) in the table, then you can go to whatever page that item is on, under the assumption that the users chose to sort at that moment in order to see other items like the item they’re looking at. This is consistent with some implementations of scrolling tables. However, most web-app paged tables don’t support the selection of an item.
You can show the ith page that the users are on when they sorted (e.g., if they’re on the third page when they sorted, show the third page under the new sort order). This is consistent with some other implementations of scrolling tables. It also supports the case where the table is almost sorted correctly (e.g., on Send Date, when Received Date is need). Showing the ith page puts the users on about the “same page” they were before. This is however not the most common use case and users are likely to feel they’ve been thrown to an arbitrary page given the weak location feedback. This option will probably produce the greatest disorientation.
You can show the 1st page under the new sort order. Depending on your tasks, perhaps most of the time when a user sorts a table, the users are interested in the items with the highest or lowest value of the attribute they sorted on. By showing the first page, the probability of you being right can approach 50%. It’s the least disorienting because the user feels they’re back at a mental anchor point –the beginning. On the other hand, users may be frustrated if they feel they’re “starting over.” Overall, this is probably your best option.
Generally following a sort, users want to jump to items with a certain value on the attribute they sorted on. This is difficult with a paged table because paging is slow and the users don’t know what page number corresponds to what value. You could label the links for the pages with the range of values found on them, but that can consume a lot of real estate. At the very least, you should always provide a link to the first and last page of the table however many pages there are so users can get to the items with highest and lowest values in one click.
Alternatively, consider supporting filtering rather than sorting to accomplish the same purpose. Depending on your users’ task, that may work much better and be less confusing and effortful.
The answer of Michael Zuschlag is very good, but I think that the case #1 and #2 that he presents are really uncommon, and doing so can be more confusing than useful.
In my opinion, you should always show the 1st page under the new sort order. If the user has selected an item, usually he don't want to sort anything, because he already found what he was looking for.
If you want to give a sort order to a list, usually you want to see the real, complete order.
A classic scenario can be a torrent site:
I search for a torrent typing some
keywords.
After the search I a have
an unordered list, 50 items per
page.
I go to second page.
Now, I think that is better sort the results starting from the item that has the highest number of seeders, and click to the header of the seeds column.
I expect to see the item with the the highest number of seeders after action 4, so after sorting you have to show me the first page. And I think this is true for about any sorting situation.
First of all, AMEN to the previous answer (and +1)
Second, just for real life examples of what users are familiar with and may expect, Yahoo Mail does #3 (jump to page 1 after sort). So do many other web sites.
My personal recommendation - if feasible to implement - would be #1 above (allow jumping to the page containing the currently selected element). Make sure that element is STILL selected.
That is both somewhat intuitive, not very un-expected, and most useful in cases where the user cares what happens. Plus, the option #3 (jumping to first page) is only 1 click away for the user assuming your paging controls include "Go to page 1", whereas, as noted in previous answer, doing first page makes it hard and long for user who did want to stay with the current item.
I definitely support the "add filtering" idea as well if feasible - I find myself using Excel for >50% of the work with tables/lists originated from any app/website, due to its exceptional combination of filtering and sorting. Perhaps YUI has a decent filterable table element assuming your UI is HTML?
We're evaluating the 45 demo of fogbugz. Thus far I like it, but there are some obvious things I'm missing.
What boggles me the most is how I can easely alter fields in the list view. I would like to open the detail screen as little as possible. It seems to be possible with the estimation column, why isn't it possible with all the other fields (like project, priority, status etc.?).
What you are asking for can not be done in FogBugz 6. You have to open up the case in order to edit most of the fields. Why they made exceptions for time estimates, I don't know.
The rationale here was as a feature to accompany quick case entry. (That's the "Add Case" link at the bottom of each group or at the bottom of the grid.)
The thinking was that it'd be neat to be able to add cases quickly and then burn through the list, estimating them quickly. We didn't really expand our thinking to include moving cases around or changing things like releases/milestones, etc.
This is something we'd like to offer in the future for many more fields, and one of those weird situations where adding a small, specific feature can sometimes make the fact that the larger, general implementation of that feature isn't there yet.
FogBugz 6 isn't big on customisation. You can edit the categories and statuses in the database tables directly (though you need to edit the "internal" project and click OK for the cache to be refreshed.
FogBugz 7 is coming out this year hopefully, and may well address many of these issues.