Distributed beamforming is a communication technique in which multiple sources transmit the same message signal at the same time and the phase of the transmitted signal is controlled in a way that the signals have constructive interference at the receiver. This paper presents a review of related work focused on implementing distributed beamforming using various techniques, also it measures and compares the amplitude as well as RSSI (Receiver Signal Strength Indicator) of the received signal for three different cases at different points in the particular area (known as grid) with respect to the reference node. The three different cases are; without beamforming (SISO), with beamforming (MISO), and with distributed beamforming (MISO).
Different wireless devices form a notion of channel quality with averaging of the received signal power. Since the RSSI (Received Signal Strength Indicator) impacts the functionality of the mobile radio communication, it is meaningful to investigate the effect of the various calculation methods of this parameter in different devices. Among different methods for modeling the wireless channels, the stochastic method is the simple one with a low computational complexity, which uses the RSSI to model the channel propagation. Since Nakagami is a common and flexible way to model the fading of a wireless channel, we investigate the role of averaging RSSI on the accuracy of the distribution. This paper presents that how the averaging of the received signal strength influence the received signal distribution in WARP board transmission.
Wireless communication in today's world has become one of the most popular and utilized technologies. As the number of users keep on increasing, the demand for high-speed data is becoming more prominent. In order to fulfill this growing demand, many wireless technologies have opted for MIMO systems. It has become a priority to provide all these users with high-speed data-access having high reliability. For MIMO systems, high speed data-rates can be achieved using multiplexing scheme when the channel conditions are observed to be very good. For poor channel conditions, diversity scheme is shown to provide higher reliability. In most of the practical systems however, the channel conditions will vary between these two extremes. Also, the performance of these schemes will heavily depend upon various other parameters such as the transmission power used, the coding rates and modulation techniques applied on the user data, etc. Under these varying conditions, it becomes difficult to decide which of these two schemes will give best performance.
This paper focuses on the comparison of power delay profiles for different environments like different room dimensions. Also for the exact same environment, we compare the multipath path properties across the IEEE 802.11 Wi-Fi spectrum for 2.4GHz and 5GHz channels. This project also shows the different multipath propagation parameters like RMS delay spread, maximum excess delay and mean excess delay that are derived from the power delay profile. Thus, this power delay profile testing method will help us understand the multipath effects on a multiband and also its study will help to estimate the causes of inter symbol interference on the channel for different environmental scenarios.
In this project, we have re-designed the full duplex (FD) medium access control (MAC) protocol based on IEEE 802.11 standard for Wireless Local Area Network System (WLAN) according to the hard requirement that no modification is allowed on the client's protocol. We discuss about potential solutions to the problem of Multiple ACK collision using implicit multi-user MIMO technique and demonstrate the feasibility of our MAC protocol when implemented in various scenarios. Some extensional works have been proposed for the next project phase.
A wireless system with multiple transmitting and multiple receiving antennas is a multi-in, multi out (MIMO) system. In multi-user MIMO, a transmitter with multiple antennas communicates with multiple receivers at the same time, where the receivers may have one or more antennas. The problem of a single base station communicating with multiple receivers is typically addressed with time-division multiple access (TDMA). However, space-division multiple access (SDMA) can allow multiple users to be serviced simultaneously. This allows access points to service more users more efficiently by increasing the maximum channel capacity in crowded Wifi spectrums. Multi-user beamforming (MUBF) provides a powerful way to implement SDMA. We will generate beams using zero-forcing beamforming (ZFBF). ZFBF weights the signals sent from each transmit antenna to each receiver by generating a beamforming matrix. Currently, these weights must be constantly re-evaluated as receivers move relative to the transmitter or change frequency bands. Our work measures how the spatial orthogonality of two different beams varies (if at all) for a given set of weights at given receiver locations across multiple frequency bands occur, especially if those bands span multiple GHz. This will inform beamforming algorithms in the future – if beam orthogonality does not suffer when the same weights are reused for the same receiver locations at different frequency bands, then the transmitter's computational load may be reduced.
SMU_EE_labphoto.jpg (267.9 KB) - added by chunter 3 years ago.


If your business has ever managed a fleet of delivery trucks, and the drivers and schedules that go with it, you understand the headaches that can happen too.
These particular headaches might be more like migraines. The logistics of managing your own fleet of delivery trucks and drivers isn't just the straightforward costs of vehicles and labour. The task can affect your bottom line in ways you never thought possible, ruin your customer service and ultimately affect your brand.
For those of you who are now considering whether to invest in your own delivery truck fleet, here are just a few of the tasks and costs of setting up and maintaining a delivery fleet.
This is one of the easy parts, even though you don't have the core competency for it (hire a fleet manager?). For many reasons, including those listed below, you don't want your fleet to come from a used truck lot.
Even with late-model vehicles, you need the resources and infrastructure in place to keep them on the road.
Of course, you already have employees, so this one doesn't stretch your existing capacity too much. But check out this article and you'll see where the headaches might begin. Trucking industry facing driver shortage.
You might even feel a headache coming on right now. You will inevitably get a call that a truck has a problem and can't make the delivery. It will be your most crucial delivery. You need extra trucks in place, and drivers ready to go; or risk losing customers.
Tylenol. Where's the f$%^%$ing Tylenol?! Oh and, wait, didn't we tell you? Sales are down so you have to cut back on the fleet.
Dedicated delivery services are offered by third-party logistics providers who take care of all the headaches.
You get one or more trucks, full-time or part-time, according to your schedule.
One or more drivers are ready to go when you need them.
The trucks can be branded for your business, and drivers can sport you company's colours and logos too.
There, don't you feel better already?! Get in touch with us here at PiVAL to learn more.


text:
Tool Box Buzz
Tool Reviews By PRO Contractors
All reviews by Brand
All reviews by Category
Browse all brands »
Power Tools Air Tools Hand Tools Measuring & Layout Cordless Tools Automotive Lawn & Garden
Browse all categories »
Home » Latest Tool Reviews » Cordless Tools » Reciprocating Saw » Cordless Reciprocating Saw Head to Head
Cordless Reciprocating Saw Head to Head
By Todd Fratzel on Head-To-Head, Reciprocating Saw
Cordless Reciprocating Saws – Head-to-Head Testing
One of the most widely used power tools in the construction industry would be the reciprocating saw. The first reciprocating saw was introduced by Milwaukee in 1965 with their SAWZALL® Reciprocating Saw. Today, over 65 years later, we find the industry filled with full-size cordless reciprocating saws used on millions of projects on a daily basis. Users include demolition contractors, plumbers, electricians, carpenters, mechanical contractors – in both residential and commercial industries – and even fire fighters. Next to the drill, we can't think of a power tool that touches so many different trades.
In our latest head-to-head, we invited tool manufacturers to send us their top-of-the-line cordless reciprocating saw that utilizes a single battery in the 18 to 22 volt arena. There are other larger voltage reciprocating saws out there (Makita has a 36V, which takes two 18V packs), and DEWALT has the 60V FlexVolt version), but we wanted to keep the group of tools at least in the same general voltage category.
The entire Tool Box Buzz crew, which is comprised of guys who cover the gamut of typical reciprocating saw users, participated in the test. Our colleague, Chris Ermides, (Editor at Tool of the Trade and Senior Editor at JLC) also participated as a guest tool-tester.
Cordless Reciprocating Saw Lineup
The following brands and models were tested in this head to head. They include:
Bosch GSA18V-125K14
DEWALT DCS367P1
Hilti WSR 22-A
Hitachi CR 18DBL
Makita XRJ05
Metabo ASE 18 LXT
Porter-Cable PCC670
Ridgid R8643 – This is a new tool that's due to be released in the first quarter or 2018
Ryobi P517 – This is a new tool that's due to be released at the end of 2017
Cordless Reciprocating Saw Specifications
We've listed the basic specifications for these tools, a link to their web page, and the batteries that were used in the test.
Bosch GSA18v-125k14: Brushless Motor, 18V Lithium Ion 6.3 Ah CORE Battery, 1-1/4″ Stroke, 0-2,500 SPM, 7.7 lbs, Hard Plastic Case, Fast Charger
DEWALT DCS367P1: Brushless Motor, 20V MAX 5.0 Ah Lithium Ion Battery, 1-1/8″ Stroke, 0-2,900 SPM, 5.0 lbs (bare tool weight), Soft Zipper Bag, Charger
Hilti WSR 22-A: Brushed Motor, 22V Lithium Ion Battery – We tested with the 5.2 Ah battery packs, 1-1/8″ Stroke, 0-3,000 SPM, 8.4 lbs, Soft Zipper Bag, Compact Charger
Hitachi CR 18DBL: Brushless Motor, 18V Lithium Ion Battery – We tested with the 6.0 Ah battery packs, 1-1/4″ Stroke, 0-2,500 SPM, 7.5 lbs, Hard Case, Battery Charger
Makita XRJ05: Brushless Motor, 18V Lithium Ion Battery – We tested with the 5.0 Ah battery packs, 1-1/4″ Stroke, 0-3,000 SPM, 8.2 lbs, Hard Case, Battery Charger
Metabo ASE 18 LXT: Brushed Motor, 18V Lithium Ion Battery – We tested with the 6.2 Ah battery packs, 1-3/16″ Stroke, 0-2,700 SPM, 7.9 lbs, Soft zipper bag, battery charger
Milwaukee 2721-20: Brushless Motor, 18V Lithium Ion Battery – We tested with the 5.0 Ah battery packs, 1-1/8″ Stroke, 0-3,000 SPM, 7.4 lbs, Hard Case, Battery Charger
Porter Cable PCC670: Brushed Motor, 18V Lithium Ion Battery – We tested with the 4.0 Ah battery packs, 1″ Stroke, 0-3,000 SPM, Not kitted
Ridgid R8643: Brushless Motor, 18V Lithium Ion Battery – We tested with the 6.0 Ah Blue Tooth battery packs, 1-1/8″ Stroke, 0-3,200 SPM, Not kitted
Ryobi P517: Brushless Motor, 18V Lithium Ion Battery – We tested with the 4.0 Ah battery packs, 7/8″ Stroke, 0-3,100 SPM, Not kitted
Head-to-Head Testing / Evaluation
For this Cordless Reciprocating Saw Head to Head we wanted to develop several speed tests relevant to several core trades. We developed tests we felt would resonate with the following users:
Plumbing/heating contractors
General construction/demolition.
The tests that we developed included:
3/4″ Gas Pipe – This test is relevant specifically to plumbing and heating contractors. We used new 6″ Lenox 14TPI blades designed for thick metal in each saw and took the average time for 5 cuts.
1/2″ EMT Conduit – In this test we simulated a task that electricians perform on a regular basis. We used new 6″ Makita 14TPI industrial bi-metal blades in each saw and took the average time for 5 cuts.
Nail Embedded Wood – Here we nailed four (4) 2×10 joists together and then installed five (5) 16d nails in each 2×10 for a total of twenty (20) nails. So for each cut we plowed the blade through four nail-embedded 2x10s. This simulates heavy-duty demolition cutting for carpenters, remodelers and general contractors. We used a new 9″ Milwaukee AX carbide-toothed 5TPI blade designed for nail-embedded wood in each saw and took the average time for 5 cuts.
In an effort to obtain similar cutting pressure applied to each saw we hung a 10 lb weight from a rope situated on the forward grip of each reciprocating saw. Testers started the cut with both hands on the saw, then released the front hand to allow the 10 lb weight to pull the blade through the cut. This method was used for all the tests.
Also, some of these saws include a variable speed option. We performed each of these speed tests at the highest speed setting. The Milwaukee One-Key® allows users to adjust the speed settings on the saw. We performed the tests using the highest factory applied speed setting.
Cordless Reciprocating Saw Test Results
3/4″ Gas Pipe Testing Results – Winner: Milwaukee 2721-20
As you can see from the results Milwaukee produced the fastest average cut speed of 3.7 seconds followed by Makita at 4.2 seconds and Ridgid at 4.4 seconds. The leaders are around twice as fast as the back of the pack and much faster than the Hilti.
It should be noted that the three slowest saws in our test all use brushed motors, which is older technology, whereas the fastest seven all use brushless motors, which is the latest technology. Hilti was a bit of a surprise to us, so we inquired about the results with Hilti, they told us that this model is a much older saw; it hasn't been updated in quite some time compared to the field of brushless models we tested.
1/2″ EMT Conduit Testing Results – Winner: Milwaukee 2721-20
Milwaukee finished in first place again with an average time of 0.61 seconds followed by Bosch at 0.65 seconds and Ridgid, with an average time of 0.71 seconds. There was a clear difference between the top five tools and the bottom five for this test.
Nail-Embedded Wood Testing Results – Winner: Milwaukee 2721-20
Milwaukee won this test with an average cut time of 36.6 seconds followed by DEWALT with 37.8 seconds and Ridgid at 42.3 seconds. Metabo, Ryobi and Porter-Cable all failed to make 5 cuts due to thermal overload on the tools – a built-in "switch" meant to protect the tool from long-term damage. Metabo managed to make 4 cuts with an average of the four at 67.9 seconds. Ryobi only managed 2 cuts with an average of 70.2 seconds, and Porter-Cable only made one cut at 84.6 seconds. This test shows us that these last 3 tools are not able to sustain extreme demolition tasks similar to this test.
Test Results Compared to Published Specifications
When we do our head-to-head testing we often get questions about the actual tool performance compared to published "specifications". For this article, we wanted to look at how these cordless reciprocating saws performed compared to their published results. Reciprocating saws have two major variables; speed (strokes per minute), and stroke length (distance the blade travels). Theoretically saws that go the fastest and have the furthest blade travel should cut material quicker than saws with lower values. For this assumption to hold true, the saws would need to have the same power output from the motor.
Below is a chart showing the Stroke Length in inches multiplied by the Stroke Speed in strokes per minute to define the Total Stroke Length per minute. One very important note about this chart; the speed of the saw is from published data for no load on the tool (in other words no pressure from cutting material).
The next chart shows the total ranking of the 3 tests we performed. This was calculated by adding up all the scores for all three tests. Milwaukee got a score of 3 because it placed 1st in each test (1+1+1=3). The lower the total score the better the tool did overall in the three tests. This is just a relative ranking to show how they did on speed tests.
If you were to rank the tools based on the published numbers, the top three performers for cutting speed should have been Makita, Ridgid and Hilti. However, in our testing the results were quite a bit different. The clear winner in our testing was the Milwaukee followed by the Ridgid, and then a three way tie for third place between Bosch, DEWALT, and Makita. Probably the most surprising tool in the group was the Hilti that tied for 6th place with Ryobi.
It's very important to note that we only performed 3 different tests and there are arguably thousands of tests you could perform on reciprocating saws and those results would vary from ours. But what is important is realizing that the published specifications on a tool don't always result in the same performance when used on the job site.
Our take away from this data is how important the motor is on the final performance. Clearly the brushless motors had a big advantage over the brushed motors. With the brushless motors comes the need to electronically control them and it's clear the Milwaukee saw has a great combination between the motor, battery, and electronics.
Cordless Reciprocating Saw Ergonomics
The ergonomics of power tools is vitally important to performance and user productivity. We ranked the top three saws with regards to ergonomics from comments provided by our group of testers after using the tools during the tests above. We included both positive and negative comments that are very subjective but important in any comparison. The group evaluated the size, configuration, weight, balance, grips, blade changing and other features for the top three tools.
Milwaukee 2721-20– The Milwaukee saw was the most powerful and fastest of the saws tested. The group liked the easy-to-see LED fuel gauge placement on the battery and the ease of battery removal and installation, although a few testers commented that the push button might be hard to use with a glove. The front over-mold was well-liked and the vibration felt by the operator on the Milwaukee 2712-20 was less than most of the saws tested. The Milwaukee is the only saw to provide the unique One-Key® smart phone application to monitor its location and performance. A few testers commented that the blade release was hard to use, needing two hands. The rafter hook and shoe adjustment mechanism rated very favorable comments.
Rigid R8643 – The testers commented that the over-mold on the front of the Rigid saw was the best fitting, most substantial of all the test units. The blade release is a two-hand operation with a twisting action and was graded down in comparison to other, easier blade releases. The unit weight was often brought up as being one of the heavier units tested. Despite its weight, the tool felt the ergonomically balanced unit when using it with two-hands. The variable speed trigger and the vibration were rated as a positive features. The vibration was less than at least 50% of the units tested. The group felt that this tool could use a rafter hook to complete its feature offering.
Makita XRJ05 – This saw had features that were well liked and some that were equally disliked. The blade changer drew universal praise for its stay-open-after-the-blade-removal twist lock feature that made blade replacement the easiest of all tested saws. The blade changing is assisted by a spring ejection feature. On the other hand, the over-mold was observed to be less comfortable and less quality than most other units. The Makita RXJ05 was a well-balanced saw and includes a rafter hook. Many reviewers were not fans of the LED fuel gauge placement being out of easy sight by the operator.
It's also worth noting that both the Bosch and DEWALT models are significantly different in size and shape compared to traditional reciprocating saws. Both of these saws are compact and designed to get into tighter locations. The Bosch was extremely smooth with minimal vibration.
Cordless Reciprocating Saw Costs and Value
It's always hard to compare the pricing of cordless tools especially when each manufacturer packages them differently with kits, bare tools, and then varying size batteries.
Bosch GSA18V-125K14: This was a kit with one battery, and a hard case. We added a second battery to this for a total price of $527 ($399 kit plus $128 for additional battery).
DEWALT DCS367P1: This was a kit with one battery, and a soft zipper bag. We added a second battery to this for a total price of $378 ($279 kit plus $99 for an additional battery).
Hilti WSR 22-A: This was not a kit, this included the tool, a soft zipper bag, two batteries and the charger for a total price of $490 ($179 tool, $133 each battery, and $45 for the charger).
Hitachi CR 18DBL: This was a kit in a hard case with one 6.0 Ah battery, but it's not available on the market quite yet. The MSRP will be approximately $408 ($300 for the kit, $108 for an extra battery)
Makita XRJ05: This was a kit in a hard case and two 5.0 Ah battery packs with a charger. This kit is priced at $408.
Metabo ASE 18 LXT: This tool came as a tool only in a soft bag, we added two 6.2 Ah battery pack and a charger for a total price of $498 ($178 for the tool, $133 for each battery and $54 for the charger).
Milwaukee 2721-20: This kits comes with a soft bag, two 5 Ah battery packs and a charger for $449.
Porter-Cable PCC670: This tool comes as a bare tool only, we added two 4.0 Ah battery packs and a charger for $216 ($50 for the tool, $64 for each battery and $39 for the charger.
Ridgid R8643: – This is a new tool that's due to be released in the first quarter or 2018. We're estimating the total cost to be $486 ($149 bare tool, $129 for each 6.0 Ah battery pack, and $79 for the charger). It's very likely this tool will be included in a kit that makes it far more affordable when it's finally released.
Ryobi P517: This is a new tool that's due to be released in the end of 2017. We're estimating the total cost to be $278 ($119 bare tool, two battery packs for $119, and $40 for a charger).
When it comes to pricing and value we have to rank the DEWALT DCS367P1 the best value. This saw tied for 3rd place in our performance testing and finished just outside the top three in ergonomics. Priced under $400 this is the best value for anyone looking for a contractor grade cordless reciprocating saw. Honorable mention needs to go to the Hitachi CR 18DBL priced at $300 considering it finished in 4th place for the performance testing. For the home owners we'd highly recommend the new Ryobi and expect it to show up in really affordable kits once it's on the market.
Overall Winner – Best Cordless Reciprocating Saw
First Place – Milwaukee M18 FUEL™ SAWZALL® Reciprocating Saw w/ ONE-KEY™
The best Cordless Reciprocating Saw is hands down the Milwaukee FUEL 2721 with One-Key®. This reciprocating saw dominated the playing field and maintains it's legacy as the SAWZALL. This cordless recip saw is every much as powerful and fast as it's older corded models and offers technology that makes it even more versatile than ever. The ability to match blade speed to the cutting application sets this tool above all the competition. This combined with it's awesome performance and compatibility with an extensive line of M18 tools make it the easy winner.
Second Place – Ridgid 18V Brushless Reciprocating Saw
The real surprise for our testing team was the Ridgid R8643 18V Brushless Reciprocating Saw. This is a brand new saw that hasn't hit the street yet but it is a beast and sure to make a huge impact for Ridgid. Not only did it clearly finish in 2nd place in our performance testing, but it also finished in 2nd for ergonomics. While the pricing seems high for a Ridgid tool, this has to do with using suggested retail pricing, pairing it with 6.0 Ah battery packs that will likely get sold for less money in double packs at some point, and the fact that it's not currently available in a kit. We have a feeling the pricing will be down around $300 once this gets rolled out.
Third Place – DEWALT 20V MAX* XR® Brushless Compact Reciprocating Saw
Third place was really difficult and close. For us, the fact that this is a compact design, and how well it did in the demo testing combined with its great pricing edged it over the Makita ever so slightly. Priced at just $378 for this kit, with solid performance this is a kit that's tough to ignore. While the new "compact" design may leave some guys scratching their heads, the proof is in the pudding so to speak and this saw doesn't disappoint.
Final Thoughts – Cordless Reciprocating Saw Head to Head
65 years ago Milwaukee released the first SAWZALL and today they are still the king of reciprocating saws. The Milwaukee FUEL M18 2721 Reciprocating Saw with One-Key® ran away with this competition. It performed better than the rest of the tools and offered the best ergonomics.
The top 5 cordless reciprocating saws (Milwaukee, Ridgid, DEWALT, Makita and Bosch) are all excellent options and any of them would be a great addition to your tool box, especially if you're already in that battery platform.
The big take away from this testing is the fact that most of these cordless reciprocating saws perform at a level consistent with older corded reciprocating saws. Cordless reciprocating saws have finally cut the cord and we can all benefit from that! If you haven't bought one yet, it's time to cut that cord and free yourself to move about the job site with ease!
Cordless Reciprocating Saw Head to Head Video Review
Todd Fratzel is the Editor of Tool Box Buzz and the President of Front Steps Media, LLC, a web based media company focused on the Home Improvement and Construction Industry.He is also the Principal Engineer for United Construction Corp., located in Newport, NH. In his capacity at United he oversees the Residential and Commercial Building Division along with all Design-Build projects.He is also the editor of Home Construction & Improvement.
@tfratzelTodd Fratzel
Wow that is a disappointing result for the HILTI. Love ours.
Did they say if they had a brushless model in the works?
To have the HILTI tied with the ryobi isn't really fair if the ryobi
DNF in the nail embedded nail test. Pretty embarrassing for HILTI
to have a worse time in the other 2 events
Dan – It's not a horrible recip saw, our testing focused on speed and in that the Hilti is much slower than the competition. We just visited Hilti last month and while they didn't show us anything new, they seemed to imply that an update on some of the older tools was in the works. As I said in the article, this was just a few tests in thousands that could be done. The Hilti is certainly built to withstand lots of heavy commercial use and that's important as well.
Except that the test was flawed, obviously the Ryobi overheated because the 10 lb weight hanging from it was too much for a weaker tool. Similarly you can take any tool that's a little wweaker and have problems if you're too ham-fisted to recognize that a lesser tool is supposed to take longer.
With any of these you could reproduce the result, just keep hanging more and more weights on the slower tools until they overheat and so on with more weight on the next slowest. All it proves is how mindless the test was instead of just putting it in someone's hand that can use a little common sense.
On the other hand, the faster tools might benefit from even MORE weight added. This is nothing new, we all already intuitively knew you don't push a homeowner grade tool as hard as a contractor grade if you want it to last.
it's a fair test. As fair as they can replicate. Theirs so many ppl bitching that theirs a better way to compare the saws… well, knock yourself out. Post the results. YouTube, Facebook, Ig, Twitter and all the other sites are free to everyone. Anyone that takes the time to show me real world results of tool use is much appreciated. Thanks guys!
Kevin Neorr
For the cost I like ryobi… Its something I can replace easily and still does it's job.. I used to be a team type person and favored makita… But ater having a truck stolen and gutted… My main focus is on the tools I operate tot the ones with a battery.
Who ties a 10 lb weight at work to their saw and than watches the saw cut? Nobody. Trying t9 be too fair. What saw cuts the best or fastest when pushed hard? Or just by an actual carpenter not a weight. This testing is ridiculous. Sorry t9 call it as I see it.
You're certainly entitled to your opinion. We did this to remove as much bias as possible. Sure, no one cuts this way. But when trying to compare several tools as fairly as possible, this makes huge sense.
No Todd it doesn't make sense, if you add so much weight that some don't finish the test. That's called an excessive amount of weight and if someone on a jobsite was pushing ANY of these tools so hard that they overloaded and thermally cut out, that guy is called an idiot who can't use the power tools because we want them to keep working. He gets to do mundane trips to the truck, sweep up, carry lumber, or go get lunch for us or something instead of breaking things.
Dave – We'll agree to disagree. This test is done by most of the tool companies when demonstrating their recip saws at the events we attend. 10 lbs isn't a crazy amount of weight, and it allows us to show how the perform under a similar loading condition. While you may think this is a narrow test we feel it's quite appropriate and provides a very good fair comparison. Let's not forget we all tested the saws without weights and found similar results.
dave: "if someone on a jobsite was pushing ANY of these tools so hard that they overloaded and thermally cut out, that guy is called an idiot". Please consider the following: the operator (the "idiot" you are referring to) will have to first learn from his own tests how much pressure he can put on the tool before knowing its weakness. Well, the excellent test report here is telling the potential operator which tool can be pushed hard and which can't. From this test one can learn which sustain heavy duty work and which don't, preventing one from becoming an idiot.
By adding a fixed weight to replace the downward force of the operator, the test eliminates most of the human bias (the tool tester). It is scientific in the sense that it is reproducible. It does make a huge amount of sense. Also note that for the weak tools, the article does explain in details how these tools behaved.
As far as cutting speed is concerned, the test is as objective as it can be.
Excellent job guys!
Thank you Ludo….we try to show all the data so users can make their own assessment based on their needs and potential uses.
I differ. What you tested was how fast the saws cut with a 10 lb weight. Why no 5,15,20. Or all weights. A good carpenter or craftsman will find the power or sweet spot of any given tool and work to this.
Your tests just look the corporate advertising the tool company do to showcase why their tools are better than anybody else's. ie it's not real world. Just my 2 cents.
Point taken. I'll just say this, we spend a ton of time doing this, not for the tool companies, but to try and give guys an idea of how the tools stack up. We're not a testing lab, and we don't have unlimited time and resources, pretty hard pressed to find anyone providing the testing data we provide on other sites.
Doresoom
And if TBB didn't do the tests with a 10 pound weight, I bet you'd be whining that they could have leaned harder on their favorite tool. Give them a break, they are trying to be as unbiased as possible in their test methodology.
Doresoom, "trying to be as unbiased as possible" is a nice gesture, but it's the result that counts. Achieving unbiased would mean you don't strap weights on unless you are willing to go to the next level of trying an appropriate level of weight.
If you really feel someone is going to play favorites, it would have been better to blindfold the users, but being sure to pick some that aren't mentally challenged so they don't go and cut their fingers off from lack of knowing how to use a sawzall.
Well. My suggestion would save time. Just get out there and use the tools and not hang weights off of them. Didn't mean to touch a nerve but if your only looking for praise why do it 😜
Glass your suggestion was entirely appropriate because in actual real world use, we aren't going to be hanging 10 lb weights on them. An artificial test that deviates from real world use this much, cannot predict real world use as well as a lesser deviation from it.
Although they haven't been released yet, a 2 pack of the Ridgid hyper octane 6.0ah Bluetooth batteries showed up on home depot's website in March for $159. Shortly thereafter they disappeared from HD's website and I would imagine they won't be back up until the official release time
https://www.ridgidforum.com/forum/power-tools/power-tool-discussion-forum/715684-6ah-batteries
I would like to have seen the dewalt 60V sawzall in the lineup of the test versus the Milwaukee. I've been debating between dewalt and milwaukee for my next sawzall.
The best saw is the one that fits your batteries. I needed a new reciprocating saw and all my stuff is Dewalt so I was about to buy a bare tool for $119 at Lowes but ended up getting a bag kit with the 20 volt saw, drill, nut driver, LED flashilight, charger, 2 batteries for $247 new on ebay.
I really love all my Ridgid tools, but if I wasn't so heavily invested in them I would seriously get into the Milwaukee sets. I have the 12V Milwaukee set that I use for work every day running wall plates and such. GREAT videos guys and I look forward to seeing each new one.
I'm really curious as to why there are different rankings of models in the different tests.
For example, what would cause the Makita to finish 2nd in the pipe test and 6th in the nail embedded wood test. Or Bosch 2nd in the conduit test, but 5th in the pipe test. Seems strange.
It's the speed of the cut. Each of these saws is cutting at a different rate with a different motor. So it's possible that for each cut (these will require different amounts of power, and the base cutting material is different, speed of the blade is important to how it cuts) that each saw responds differently. This is not unusual at all.
Did you use the orbital setting on the Ryobi for the nail embedded wood test?
Yes we did.
Mathew R
I own the new brushless Bosch and its amazing. My coworker is so jealous of me and he owns the Milwaukee Fuel. The fuel isn't a bad saw but no way it keeps up with the Bosch on any material. The new Core batteries make a huge difference compared to the old regular 18V. Nice test but from using both saws on the field I prefer the ergonomics and power of the Bosch.
Interesting…what are you cutting? We found different results in our tests, and we also use them in the field.
You found the wrong results because the new Bosch has more power than the older Milwaukee so the Bosch can be pushed harder than the 10lbs. That's why the compact dewalt did so well. It's sweet spot is 10lbs so it scored well even though it lacks the power of the others.
Why are people bitching about how the test was conducted?
You guys did a solid job. Thank you. My Milwaukee rep let me test their saws-all a little over a year ago, I bought it after the first time I used it. It's awesome.
Justin Anderson
The Ridgid you tested is now available as a kit with charger and 2 batteries for $199.
Donnie Johnson
Well if that don't just cock your pistol?
About the bosch: in your video review of the bosch you guys talk about 3 different cutting options (orbital motion). What was the settings for the various cuts performed in the test? It may be that some settings were better suited for some material / type of cut.
Otherwise a great write-up for a really well set up and conducted test.
The wood test used orbital, the two metal cutting tests were not.
Product reviews on this site contain our opinion of a product or service. We will always strive for objectivity and transparency in our reviews. Our goal is to provide readers with honest, objective information based on our own experiences. We never have and never will accept payment in exchange for a positive review. Many of the products that we review are provided to us for free by a manufacturer or retailer. In some cases, we also have advertising or affiliate relationships with manufacturers and retailers of products and services we review. For additional information please visit our additional disclosure policies.
Best Portable Jobsite Table Saw – Head-...
Best Dust Extractor – Head-To-Head
Best Benchtop Thickness Planer – Head-t...
Best Cordless 1/2″ Hammer Drill
Copyright © 2010-2019 Tool Box Buzz, LLC All Rights Reserved. | Disclaimer & Privacy Policy
Tool Box Buzz™ is a Trademark of Tool Box Buzz, LLC
Visit Our Partner Sites
This website uses cookies to improve your experience. By clicking on 'Accept' or continuing to use this website, you agree that cookies can be placed. For more information, check out our Disclaimer & Privacy Policy . Accept

redpajama_set_name: RedPajamaCommonCrawl


Animal Welfare League, South Australia $20 cats!
Have you been thinking about adding a cat to your family?
Getting an adult cat, as opposed to a kitten, is a great way to ensure you get a kitty with a temperament which is a good fit for you AND save a beautiful life at the same time. Adults cats are less likely to be adopted once they are past the super cute kitten stage...but they're still cute!
If you live in or near Adelaide, tomorrow is the start of the Winter sale of adult cats at the Animal Welfare League...all $20 until September 11.
I did work experience at the AWL when I was doing an animal attending course and then later volunteered as a Cat Cuddler - it was a lovely gig.
I met little Savannah there and took her home, later to live with my folks as the resident post office cat. They called her Millie (she was a millenium baby, after all) and she is still going at 16 years of age, although now living with a quite a few health problems and an acquired cranky disposition!
Here she is as a wee mite, about 6 months old I think. And below with my other cat, Zoe.
I have owned a few lovely cats but never a ginger....hopefully one day.
Please check out their website to see the available cuties or head in to meet them in person. Cats are all so different; active, sleepy, affectionate, a little shy, adventurous, quiet, noisy (Zoe certainly was in her later years!), gentle, playful etc, you can see what you like best.


Based in Fareham, we are one of the largest outboard and rib centers in Hampshire. With multi dealerships, an authorised workshop and on-site mechanics we are able to offer support and advice to our customers. Our shop is situated at the workshop so you can ask technical advice as well as being able to see our stock of engines and make inquires about parts from our spares customer support counter.
Used regularly by over 2,500 boating enthusiasts from across the country we sell outboards, ribs and dinghies. We have a large stock of spare parts for all makes of outboard engines. Whether your outboard needs a routine service or emergency repair, you can trust our qualified engineers. We're a family-owned, authorised dealership, one of the largest on the south coast. We still value customer care, value for money, honesty and integrity.
We sell, service & repair outboard engines. We take in part exchanges, & sell secondhand engines. We have a good stock of fast moving spares - all those thing you need to service the engine yourself. We offer a spares enquiry service where we can find the correct spare part for your engine.
We sell to individual customers, trade customers, sailing clubs & schools so we try & offer a fast efficient service!
We believe if you are paying for the service you should get it done properly & professionally!


Скачать MS CrAzY Sonic Lichtenfels - B-Boys Fly Girls в mp3 формате, полный текст песни B-Boys Fly Girls, видеоклип и слушать MS CrAzY Sonic Lichtenfels - B-Boys Fly Girls онлайн.
SABRINA - Boys (Video Original) - HD.
- **The Soho Dolls** - I wanna be honesty-Dont touch the girls, Dont kiss the girls, I have the right to pull the girls.


text:
#include <sys/param.h>
#include <sys/queue.h>
#include <sys/uio.h>

#include <ctype.h>
#include <err.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <syslog.h>
#include <unistd.h>

#include <bsnmp/asn1.h>
#include <bsnmp/snmp.h>
#include "bsnmptc.h"
#include "bsnmptools.h"

extern int _bsnmptools_debug;
#define	DEBUG	if (_bsnmptools_debug) fprintf

/* Allocate memory and initialize list. */
struct snmp_mappings *
snmp_mapping_init(void)
{
	struct snmp_mappings *m;

	if ((m = malloc(sizeof(struct snmp_mappings))) == NULL) {
		syslog(LOG_ERR, "malloc() failed: %s", strerror(errno));
		return (NULL);
	}

	memset(m, 0, sizeof(struct snmp_mappings));
	return (m);
}

#define		snmp_nodelist	mappings->nodelist
#define		snmp_intlist	mappings->intlist
#define		snmp_octlist	mappings->octlist
#define		snmp_oidlist	mappings->oidlist
#define		snmp_iplist	mappings->iplist
#define		snmp_ticklist	mappings->ticklist
#define		snmp_cntlist	mappings->cntlist
#define		snmp_gaugelist	mappings->gaugelist
#define		snmp_cnt64list	mappings->cnt64list
#define		snmp_enumlist	mappings->enumlist
#define		snmp_tablelist	mappings->tablelist
#define		snmp_tclist	mappings->tclist

void
enum_pairs_free(struct enum_pairs *headp)
{
	struct enum_pair *e;

	if (headp == NULL)
		return;

	while ((e = STAILQ_FIRST(headp)) != NULL) {
		STAILQ_REMOVE_HEAD(headp, link);

		if (e->enum_str)
			free(e->enum_str);
		free(e);
	}

	free(headp);
}

void
snmp_mapping_entryfree(struct snmp_oid2str *entry)
{
	if (entry->string)
		free(entry->string);

	if (entry->tc == SNMP_TC_OWN)
		enum_pairs_free(entry->snmp_enum);

	free(entry);
}

static void
snmp_mapping_listfree(struct snmp_mapping *headp)
{
	struct snmp_oid2str *p;

	while ((p = SLIST_FIRST(headp)) != NULL) {
		SLIST_REMOVE_HEAD(headp, link);

		if (p->string)
			free(p->string);

		if (p->tc == SNMP_TC_OWN)
			enum_pairs_free(p->snmp_enum);
		free(p);
	}

	SLIST_INIT(headp);
}

void
snmp_index_listfree(struct snmp_idxlist *headp)
{
	struct index *i;

	while ((i = STAILQ_FIRST(headp)) != NULL) {
		STAILQ_REMOVE_HEAD(headp, link);
		if (i->tc == SNMP_TC_OWN)
			enum_pairs_free(i->snmp_enum);
		free(i);
	}

	STAILQ_INIT(headp);
}

static void
snmp_mapping_table_listfree(struct snmp_table_index *headp)
{
	struct snmp_index_entry *t;

	while ((t = SLIST_FIRST(headp)) != NULL) {
		SLIST_REMOVE_HEAD(headp, link);

		if (t->string)
			free(t->string);

		snmp_index_listfree(&(t->index_list));
		free(t);
	}
}

static void
snmp_enumtc_listfree(struct snmp_enum_tc *headp)
{
	struct enum_type *t;

	while ((t = SLIST_FIRST(headp)) != NULL) {
		SLIST_REMOVE_HEAD(headp, link);

		if (t->name)
			free(t->name);
		enum_pairs_free(t->snmp_enum);
		free(t);
	}
}

int
snmp_mapping_free(struct snmp_toolinfo *snmptoolctx)
{
	if (snmptoolctx == NULL || snmptoolctx->mappings == NULL)
		return (-1);

	snmp_mapping_listfree(&snmptoolctx->snmp_nodelist);
	snmp_mapping_listfree(&snmptoolctx->snmp_intlist);
	snmp_mapping_listfree(&snmptoolctx->snmp_octlist);
	snmp_mapping_listfree(&snmptoolctx->snmp_oidlist);
	snmp_mapping_listfree(&snmptoolctx->snmp_iplist);
	snmp_mapping_listfree(&snmptoolctx->snmp_ticklist);
	snmp_mapping_listfree(&snmptoolctx->snmp_cntlist);
	snmp_mapping_listfree(&snmptoolctx->snmp_gaugelist);
	snmp_mapping_listfree(&snmptoolctx->snmp_cnt64list);
	snmp_mapping_listfree(&snmptoolctx->snmp_enumlist);
	snmp_mapping_table_listfree(&snmptoolctx->snmp_tablelist);
	snmp_enumtc_listfree(&snmptoolctx->snmp_tclist);
	free(snmptoolctx->mappings);

	return (0);
}

static void
snmp_dump_enumpairs(struct enum_pairs *headp)
{
	struct enum_pair *entry;

	if (headp == NULL)
		return;

	fprintf(stderr,"enums: ");
	STAILQ_FOREACH(entry, headp, link)
		fprintf(stderr,"%d - %s, ", entry->enum_val,
		    (entry->enum_str == NULL)?"NULL":entry->enum_str);

	fprintf(stderr,"; ");
}

void
snmp_dump_oid2str(struct snmp_oid2str *entry)
{
	char buf[ASN_OIDSTRLEN];

	if (entry != NULL) {
		memset(buf, 0, sizeof(buf));
		asn_oid2str_r(&(entry->var), buf);
		DEBUG(stderr, "%s - %s - %d - %d - %d", buf, entry->string,
		    entry->syntax, entry->access, entry->strlen);
		snmp_dump_enumpairs(entry->snmp_enum);
		DEBUG(stderr,"%s \n", (entry->table_idx == NULL)?"No table":
		    entry->table_idx->string);
	}
}

static void
snmp_dump_indexlist(struct snmp_idxlist *headp)
{
	struct index *entry;

	if (headp == NULL)
		return;

	STAILQ_FOREACH(entry, headp, link) {
		fprintf(stderr,"%d, ", entry->syntax);
		snmp_dump_enumpairs(entry->snmp_enum);
	}

	fprintf(stderr,"\n");
}

/* Initialize the enum pairs list of a oid2str entry. */
struct enum_pairs *
enum_pairs_init(void)
{
	struct enum_pairs *snmp_enum;

	if ((snmp_enum = malloc(sizeof(struct enum_pairs))) == NULL) {
		syslog(LOG_ERR, "malloc() failed: %s", strerror(errno));
		return (NULL);
	}

	STAILQ_INIT(snmp_enum);
	return (snmp_enum);
}

/*
 * Given a number and string, allocate memory for a (int, string) pair and add
 * it to the given oid2str mapping entry's enum pairs list.
 */
int32_t
enum_pair_insert(struct enum_pairs *headp, int32_t enum_val, char *enum_str)
{
	struct enum_pair *e_new;

	if ((e_new = malloc(sizeof(struct enum_pair))) == NULL) {
		syslog(LOG_ERR, "malloc() failed: %s", strerror(errno));
		return (-1);
	}

	memset(e_new, 0, sizeof(struct enum_pair));

	if ((e_new->enum_str = malloc(strlen(enum_str) + 1)) == NULL) {
		syslog(LOG_ERR, "malloc() failed: %s", strerror(errno));
		free(e_new);
		return (-1);
	}

	e_new->enum_val = enum_val;
	strlcpy(e_new->enum_str, enum_str, strlen(enum_str) + 1);
	STAILQ_INSERT_TAIL(headp, e_new, link);

	return (1);

}

/*
 * Insert an entry in a list - entries are lexicographicaly order by asn_oid.
 * Returns 1 on success, -1 if list is not initialized, 0 if a matching oid already
 * exists. Error cheking is left to calling function.
 */
static int
snmp_mapping_insert(struct snmp_mapping *headp, struct snmp_oid2str *entry)
{
	int32_t rc;
	struct snmp_oid2str *temp, *prev;

	if (entry == NULL)
		return(-1);

	if ((prev = SLIST_FIRST(headp)) == NULL ||
	    asn_compare_oid(&(entry->var), &(prev->var)) < 0) {
		SLIST_INSERT_HEAD(headp, entry, link);
		return (1);
	} else
		rc = -1;	/* Make the compiler happy. */

	SLIST_FOREACH(temp, headp, link) {
		if ((rc = asn_compare_oid(&(entry->var), &(temp->var))) <= 0)
			break;
		prev = temp;
		rc = -1;
	}

	switch (rc) {
	    case 0:
		/* Ops, matching OIDs - hope the rest info also matches. */
		if (strncmp(temp->string, entry->string, entry->strlen)) {
			syslog(LOG_INFO, "Matching OIDs with different string "
			    "mappings: old - %s, new - %s", temp->string,
			    entry->string);
			return (-1);
		}
		/*
		 * Ok, we have that already.
		 * As long as the strings match - don't complain.
		 */
		return (0);

	    case 1:
		SLIST_INSERT_AFTER(temp, entry, link);
		break;

	    case -1:
		SLIST_INSERT_AFTER(prev, entry, link);
		break;

	    default:
		/* NOTREACHED */
		return (-1);
	}

	return (1);
}

int32_t
snmp_node_insert(struct snmp_toolinfo *snmptoolctx, struct snmp_oid2str *entry)
{
	if (snmptoolctx != NULL && snmptoolctx->mappings)
		return (snmp_mapping_insert(&snmptoolctx->snmp_nodelist,entry));

	return (-1);
}

static int32_t
snmp_int_insert(struct snmp_toolinfo *snmptoolctx, struct snmp_oid2str *entry)
{
	if (snmptoolctx != NULL && snmptoolctx->mappings)
		return (snmp_mapping_insert(&snmptoolctx->snmp_intlist,entry));

	return (-1);
}

static int32_t
snmp_oct_insert(struct snmp_toolinfo *snmptoolctx, struct snmp_oid2str *entry)
{
	if (snmptoolctx != NULL && snmptoolctx->mappings)
		return (snmp_mapping_insert(&snmptoolctx->snmp_octlist,entry));

	return (-1);
}

static int32_t
snmp_oid_insert(struct snmp_toolinfo *snmptoolctx, struct snmp_oid2str *entry)
{
	if (snmptoolctx != NULL && snmptoolctx->mappings)
		return (snmp_mapping_insert(&snmptoolctx->snmp_oidlist,entry));

	return (-1);
}

static int32_t
snmp_ip_insert(struct snmp_toolinfo *snmptoolctx, struct snmp_oid2str *entry)
{
	if (snmptoolctx != NULL && snmptoolctx->mappings)
		return (snmp_mapping_insert(&snmptoolctx->snmp_iplist,entry));

	return (-1);
}

static int32_t
snmp_tick_insert(struct snmp_toolinfo *snmptoolctx, struct snmp_oid2str *entry)
{
	if (snmptoolctx != NULL && snmptoolctx->mappings)
		return (snmp_mapping_insert(&snmptoolctx->snmp_ticklist,entry));

	return (-1);
}

static int32_t
snmp_cnt_insert(struct snmp_toolinfo *snmptoolctx, struct snmp_oid2str *entry)
{
	if (snmptoolctx != NULL && snmptoolctx->mappings)
		return (snmp_mapping_insert(&snmptoolctx->snmp_cntlist,entry));

	return (-1);
}

static int32_t
snmp_gauge_insert(struct snmp_toolinfo *snmptoolctx, struct snmp_oid2str *entry)
{
	if (snmptoolctx != NULL && snmptoolctx->mappings)
		return (snmp_mapping_insert(&snmptoolctx->snmp_gaugelist,entry));

	return (-1);
}

static int32_t
snmp_cnt64_insert(struct snmp_toolinfo *snmptoolctx, struct snmp_oid2str *entry)
{
	if (snmptoolctx != NULL && snmptoolctx->mappings)
		return (snmp_mapping_insert(&snmptoolctx->snmp_cnt64list,entry));

	return (-1);
}

int32_t
snmp_enum_insert(struct snmp_toolinfo *snmptoolctx, struct snmp_oid2str *entry)
{
	if (snmptoolctx != NULL && snmptoolctx->mappings)
		return (snmp_mapping_insert(&snmptoolctx->snmp_enumlist,entry));

	return (-1);
}

int32_t
snmp_leaf_insert(struct snmp_toolinfo *snmptoolctx, struct snmp_oid2str *entry)
{
	switch (entry->syntax) {
		case SNMP_SYNTAX_INTEGER:
			return (snmp_int_insert(snmptoolctx, entry));
		case SNMP_SYNTAX_OCTETSTRING:
			return (snmp_oct_insert(snmptoolctx, entry));
		case SNMP_SYNTAX_OID:
			return (snmp_oid_insert(snmptoolctx, entry));
		case SNMP_SYNTAX_IPADDRESS:
			return (snmp_ip_insert(snmptoolctx, entry));
		case SNMP_SYNTAX_COUNTER:
			return (snmp_cnt_insert(snmptoolctx, entry));
		case SNMP_SYNTAX_GAUGE:
			return (snmp_gauge_insert(snmptoolctx, entry));
		case SNMP_SYNTAX_TIMETICKS:
			return (snmp_tick_insert(snmptoolctx, entry));
		case SNMP_SYNTAX_COUNTER64:
			return (snmp_cnt64_insert(snmptoolctx, entry));
		default:
			break;
	}

	return (-1);
}

static int32_t
snmp_index_insert(struct snmp_idxlist *headp, struct index *idx)
{
	if (headp == NULL || idx == NULL)
		return (-1);

	STAILQ_INSERT_TAIL(headp, idx, link);
	return (1);
}

int32_t
snmp_syntax_insert(struct snmp_idxlist *headp, struct enum_pairs *enums,
    enum snmp_syntax syntax, enum snmp_tc tc)
{
	struct index *idx;

	if ((idx = malloc(sizeof(struct index))) == NULL) {
		syslog(LOG_ERR, "malloc() failed: %s", strerror(errno));
		return (-1);
	}

	memset(idx, 0, sizeof(struct index));

	if (snmp_index_insert(headp, idx) < 0) {
		free(idx);
		return (-1);
	}

	idx->syntax = syntax;
	idx->snmp_enum = enums;
	idx->tc = tc;

	return (1);
}

int32_t
snmp_table_insert(struct snmp_toolinfo *snmptoolctx,
    struct snmp_index_entry *entry)
{
	int32_t rc;
	struct snmp_index_entry *temp, *prev;

	if (snmptoolctx == NULL || snmptoolctx->mappings == NULL ||
	    entry == NULL)
		return(-1);

	if ((prev = SLIST_FIRST(&snmptoolctx->snmp_tablelist)) == NULL ||
	    asn_compare_oid(&(entry->var), &(prev->var)) < 0) {
		SLIST_INSERT_HEAD(&snmptoolctx->snmp_tablelist, entry, link);
		return (1);
	} else
		rc = -1;	/* Make the compiler happy. */

	SLIST_FOREACH(temp, &snmptoolctx->snmp_tablelist, link) {
		if ((rc = asn_compare_oid(&(entry->var), &(temp->var))) <= 0)
			break;
		prev = temp;
		rc = -1;
	}

	switch (rc) {
	    case 0:
		/* Ops, matching OIDs - hope the rest info also matches. */
		if (strncmp(temp->string, entry->string, entry->strlen)) {
			syslog(LOG_INFO, "Matching OIDs with different string "
			    "mapping - old - %s, new - %s", temp->string,
			    entry->string);
			return (-1);
		}
		return(0);

	    case 1:
		SLIST_INSERT_AFTER(temp, entry, link);
		break;

	    case -1:
		SLIST_INSERT_AFTER(prev, entry, link);
		break;

	    default:
		/* NOTREACHED */
		return (-1);
	}

	return (1);
}

struct enum_type *
snmp_enumtc_init(char *name)
{
	struct enum_type *enum_tc;

	if ((enum_tc = malloc(sizeof(struct enum_type))) == NULL) {
		syslog(LOG_ERR, "malloc() failed: %s", strerror(errno));
		return (NULL);
	}

	memset(enum_tc, 0, sizeof(struct enum_type));
	if ((enum_tc->name = malloc(strlen(name) + 1)) == NULL) {
		syslog(LOG_ERR, "malloc() failed: %s", strerror(errno));
		free(enum_tc);
		return (NULL);
	}
	strlcpy(enum_tc->name, name, strlen(name) + 1);

	return (enum_tc);
}

void
snmp_enumtc_free(struct enum_type *tc)
{
	if (tc->name)
		free(tc->name);
	if (tc->snmp_enum)
		enum_pairs_free(tc->snmp_enum);
	free(tc);
}

void
snmp_enumtc_insert(struct snmp_toolinfo *snmptoolctx, struct enum_type *entry)
{
	if (snmptoolctx == NULL || snmptoolctx->mappings == NULL)
		return;	/* XXX no error handling? */

	SLIST_INSERT_HEAD(&snmptoolctx->snmp_tclist, entry, link);
}

struct enum_type *
snmp_enumtc_lookup(struct snmp_toolinfo *snmptoolctx, char *name)
{
	struct enum_type *temp;

	if (snmptoolctx == NULL || snmptoolctx->mappings == NULL)
		return (NULL);

	SLIST_FOREACH(temp, &snmptoolctx->snmp_tclist, link) {
		if (strcmp(temp->name, name) == 0)
			return (temp);
	}
	return (NULL);
}

static void
snmp_mapping_dumplist(struct snmp_mapping *headp)
{
	char buf[ASN_OIDSTRLEN];
	struct snmp_oid2str *entry;

	if (headp == NULL)
		return;

	SLIST_FOREACH(entry,headp,link) {
		memset(buf, 0, sizeof(buf));
		asn_oid2str_r(&(entry->var), buf);
		fprintf(stderr, "%s - %s - %d - %d - %d", buf, entry->string,
		    entry->syntax, entry->access ,entry->strlen);
		fprintf(stderr," - %s \n", (entry->table_idx == NULL)?
		    "No table":entry->table_idx->string);
	}
}

static void
snmp_mapping_dumptable(struct snmp_table_index *headp)
{
	char buf[ASN_OIDSTRLEN];
	struct snmp_index_entry *entry;

	if (headp == NULL)
		return;

	SLIST_FOREACH(entry, headp, link) {
		memset(buf, 0, sizeof(buf));
		asn_oid2str_r(&(entry->var), buf);
		fprintf(stderr,"%s - %s - %d - ", buf, entry->string,
		    entry->strlen);
		snmp_dump_indexlist(&(entry->index_list));
	}
}

void
snmp_mapping_dump(struct snmp_toolinfo *snmptoolctx /* int bits */)
{
	if (!_bsnmptools_debug)
		return;

	if (snmptoolctx == NULL) {
		fprintf(stderr,"No snmptool context!\n");
		return;
	}

	if (snmptoolctx->mappings == NULL) {
		fprintf(stderr,"No mappings!\n");
		return;
	}

	fprintf(stderr,"snmp_nodelist:\n");
	snmp_mapping_dumplist(&snmptoolctx->snmp_nodelist);

	fprintf(stderr,"snmp_intlist:\n");
	snmp_mapping_dumplist(&snmptoolctx->snmp_intlist);

	fprintf(stderr,"snmp_octlist:\n");
	snmp_mapping_dumplist(&snmptoolctx->snmp_octlist);

	fprintf(stderr,"snmp_oidlist:\n");
	snmp_mapping_dumplist(&snmptoolctx->snmp_oidlist);

	fprintf(stderr,"snmp_iplist:\n");
	snmp_mapping_dumplist(&snmptoolctx->snmp_iplist);

	fprintf(stderr,"snmp_ticklist:\n");
	snmp_mapping_dumplist(&snmptoolctx->snmp_ticklist);

	fprintf(stderr,"snmp_cntlist:\n");
	snmp_mapping_dumplist(&snmptoolctx->snmp_cntlist);

	fprintf(stderr,"snmp_gaugelist:\n");
	snmp_mapping_dumplist(&snmptoolctx->snmp_gaugelist);

	fprintf(stderr,"snmp_cnt64list:\n");
	snmp_mapping_dumplist(&snmptoolctx->snmp_cnt64list);

	fprintf(stderr,"snmp_enumlist:\n");
	snmp_mapping_dumplist(&snmptoolctx->snmp_enumlist);

	fprintf(stderr,"snmp_tablelist:\n");
	snmp_mapping_dumptable(&snmptoolctx->snmp_tablelist);
}

char *
enum_string_lookup(struct enum_pairs *headp, int32_t enum_val)
{
	struct enum_pair *temp;

	if (headp == NULL)
		return (NULL);

	STAILQ_FOREACH(temp, headp, link) {
		if (temp->enum_val == enum_val)
			return (temp->enum_str);
	}

	return (NULL);
}

int32_t
enum_number_lookup(struct enum_pairs *headp, char *e_str)
{
	struct enum_pair *tmp;

	if (headp == NULL)
		return (-1);

	STAILQ_FOREACH(tmp, headp, link)
		if (strncmp(tmp->enum_str, e_str, strlen(tmp->enum_str)) == 0)
			return (tmp->enum_val);

	return (-1);
}

static int32_t
snmp_lookuplist_string(struct snmp_mapping *headp, struct snmp_object *s)
{
	struct snmp_oid2str *temp;

	if (headp == NULL)
		return (-1);

	SLIST_FOREACH(temp, headp, link)
		if (asn_compare_oid(&(temp->var), &(s->val.var)) == 0)
			break;

	if ((s->info = temp) == NULL)
		return (-1);

	return (1);
}

/* provided an asn_oid find the corresponding string for it */
static int32_t
snmp_lookup_leaf(struct snmp_mapping *headp, struct snmp_object *s)
{
	struct snmp_oid2str *temp;

	if (headp == NULL)
		return (-1);

	SLIST_FOREACH(temp,headp,link) {
		if ((asn_compare_oid(&(temp->var), &(s->val.var)) == 0) ||
		    (asn_is_suboid(&(temp->var), &(s->val.var)))) {
			s->info = temp;
			return (1);
		}
	}

	return (-1);
}

int32_t
snmp_lookup_leafstring(struct snmp_toolinfo *snmptoolctx, struct snmp_object *s)
{
	if (snmptoolctx == NULL || snmptoolctx->mappings == NULL || s == NULL)
		return (-1);

	switch (s->val.syntax) {
		case SNMP_SYNTAX_INTEGER:
			return (snmp_lookup_leaf(&snmptoolctx->snmp_intlist, s));
		case SNMP_SYNTAX_OCTETSTRING:
			return (snmp_lookup_leaf(&snmptoolctx->snmp_octlist, s));
		case SNMP_SYNTAX_OID:
			return (snmp_lookup_leaf(&snmptoolctx->snmp_oidlist, s));
		case SNMP_SYNTAX_IPADDRESS:
			return (snmp_lookup_leaf(&snmptoolctx->snmp_iplist, s));
		case SNMP_SYNTAX_COUNTER:
			return (snmp_lookup_leaf(&snmptoolctx->snmp_cntlist, s));
		case SNMP_SYNTAX_GAUGE:
			return (snmp_lookup_leaf(
			    &snmptoolctx->snmp_gaugelist, s));
		case SNMP_SYNTAX_TIMETICKS:
			return (snmp_lookup_leaf(
			    &snmptoolctx->snmp_ticklist, s));
		case SNMP_SYNTAX_COUNTER64:
			return (snmp_lookup_leaf(
			    &snmptoolctx->snmp_cnt64list, s));
		case SNMP_SYNTAX_NOSUCHOBJECT:
			/* FALLTHROUGH */
		case SNMP_SYNTAX_NOSUCHINSTANCE:
			/* FALLTHROUGH */
		case SNMP_SYNTAX_ENDOFMIBVIEW:
			return (snmp_lookup_allstring(snmptoolctx, s));
		default:
			warnx("Unknown syntax - %d", s->val.syntax);
			break;
	}

	return (-1);
}

int32_t
snmp_lookup_enumstring(struct snmp_toolinfo *snmptoolctx, struct snmp_object *s)
{
	if (snmptoolctx == NULL || snmptoolctx->mappings == NULL || s == NULL)
		return (-1);

	return (snmp_lookuplist_string(&snmptoolctx->snmp_enumlist, s));
}

int32_t
snmp_lookup_oidstring(struct snmp_toolinfo *snmptoolctx, struct snmp_object *s)
{
	if (snmptoolctx == NULL || snmptoolctx->mappings == NULL || s == NULL)
		return (-1);

	return (snmp_lookuplist_string(&snmptoolctx->snmp_oidlist, s));
}

int32_t
snmp_lookup_nodestring(struct snmp_toolinfo *snmptoolctx, struct snmp_object *s)
{
	if (snmptoolctx == NULL || snmptoolctx->mappings == NULL || s == NULL)
		return (-1);

	return (snmp_lookuplist_string(&snmptoolctx->snmp_nodelist, s));
}

int32_t
snmp_lookup_allstring(struct snmp_toolinfo *snmptoolctx, struct snmp_object *s)
{
	if (snmptoolctx == NULL || snmptoolctx->mappings == NULL)
		return (-1);

	if (snmp_lookup_leaf(&snmptoolctx->snmp_intlist, s) > 0)
		return (1);
	if (snmp_lookup_leaf(&snmptoolctx->snmp_octlist, s) > 0)
		return (1);
	if (snmp_lookup_leaf(&snmptoolctx->snmp_oidlist, s) > 0)
		return (1);
	if (snmp_lookup_leaf(&snmptoolctx->snmp_iplist, s) > 0)
		return (1);
	if (snmp_lookup_leaf(&snmptoolctx->snmp_cntlist, s) > 0)
		return (1);
	if (snmp_lookup_leaf(&snmptoolctx->snmp_gaugelist, s) > 0)
		return (1);
	if (snmp_lookup_leaf(&snmptoolctx->snmp_ticklist, s) > 0)
		return (1);
	if (snmp_lookup_leaf(&snmptoolctx->snmp_cnt64list, s) > 0)
		return (1);
	if (snmp_lookuplist_string(&snmptoolctx->snmp_enumlist, s) > 0)
		return (1);
	if (snmp_lookuplist_string(&snmptoolctx->snmp_nodelist, s) > 0)
		return (1);

	return (-1);
}

int32_t
snmp_lookup_nonleaf_string(struct snmp_toolinfo *snmptoolctx,
    struct snmp_object *s)
{
	if (snmptoolctx == NULL)
		return (-1);

	if (snmp_lookuplist_string(&snmptoolctx->snmp_nodelist, s) > 0)
		return (1);
	if (snmp_lookuplist_string(&snmptoolctx->snmp_enumlist, s) > 0)
		return (1);

	return (-1);
}

static int32_t
snmp_lookup_oidlist(struct snmp_mapping *hp, struct snmp_object *s, char *oid)
{
	struct snmp_oid2str *temp;

	if (hp == NULL)
		return (-1);

	SLIST_FOREACH(temp, hp, link) {
		if (temp->strlen != strlen(oid))
			continue;

		if (strncmp(temp->string, oid, temp->strlen))
			continue;

		s->val.syntax = temp->syntax;
		s->info = temp;
		asn_append_oid(&(s->val.var), &(temp->var));
		return (1);
	}

	return (-1);
}

static int32_t
snmp_lookup_tablelist(struct snmp_toolinfo *snmptoolctx,
    struct snmp_table_index *headp, struct snmp_object *s, char *oid)
{
	struct snmp_index_entry *temp;

	if (snmptoolctx == NULL || headp == NULL)
		return (-1);

	SLIST_FOREACH(temp, headp, link) {
		if (temp->strlen != strlen(oid))
			continue;

		if (strncmp(temp->string, oid, temp->strlen))
			continue;

		/*
		 * Another hack here - if we were given a table name
		 * return the corresponding pointer to it's entry.
		 * That should not change the reponce we'll get.
		 */
		s->val.syntax = SNMP_SYNTAX_NULL;
		asn_append_oid(&(s->val.var), &(temp->var));
		if (snmp_lookup_leaf(&snmptoolctx->snmp_nodelist, s) > 0)
			return (1);
		else
			return (-1);
	}

	return (-1);
}

int32_t
snmp_lookup_oidall(struct snmp_toolinfo *snmptoolctx, struct snmp_object *s,
    char *oid)
{
	if (snmptoolctx == NULL || s == NULL || oid == NULL)
		return (-1);

	if (snmp_lookup_oidlist(&snmptoolctx->snmp_intlist, s, oid) > 0)
		return (1);
	if (snmp_lookup_oidlist(&snmptoolctx->snmp_octlist, s, oid) > 0)
		return (1);
	if (snmp_lookup_oidlist(&snmptoolctx->snmp_oidlist, s, oid) > 0)
		return (1);
	if (snmp_lookup_oidlist(&snmptoolctx->snmp_iplist, s, oid) > 0)
		return (1);
	if (snmp_lookup_oidlist(&snmptoolctx->snmp_ticklist, s, oid) > 0)
		return (1);
	if (snmp_lookup_oidlist(&snmptoolctx->snmp_cntlist, s, oid) > 0)
		return (1);
	if (snmp_lookup_oidlist(&snmptoolctx->snmp_gaugelist, s, oid) > 0)
		return (1);
	if (snmp_lookup_oidlist(&snmptoolctx->snmp_cnt64list, s, oid) > 0)
		return (1);
	if (snmp_lookup_oidlist(&snmptoolctx->snmp_nodelist, s, oid) > 0)
		return (1);
	if (snmp_lookup_tablelist(snmptoolctx, &snmptoolctx->snmp_tablelist,
	    s, oid) > 0)
		return (1);

	return (-1);
}

int32_t
snmp_lookup_enumoid(struct snmp_toolinfo *snmptoolctx, struct snmp_object *s,
    char *oid)
{
	if (snmptoolctx == NULL || s == NULL)
		return (-1);

	return (snmp_lookup_oidlist(&snmptoolctx->snmp_enumlist, s, oid));
}

int32_t
snmp_lookup_oid(struct snmp_toolinfo *snmptoolctx, struct snmp_object *s,
    char *oid)
{
	if (snmptoolctx == NULL || s == NULL)
		return (-1);

	switch (s->val.syntax) {
		case SNMP_SYNTAX_INTEGER:
			return (snmp_lookup_oidlist(&snmptoolctx->snmp_intlist,
			    s, oid));
		case SNMP_SYNTAX_OCTETSTRING:
			return (snmp_lookup_oidlist(&snmptoolctx->snmp_octlist,
			    s, oid));
		case SNMP_SYNTAX_OID:
			return (snmp_lookup_oidlist(&snmptoolctx->snmp_oidlist,
			    s, oid));
		case SNMP_SYNTAX_IPADDRESS:
			return (snmp_lookup_oidlist(&snmptoolctx->snmp_iplist,
			    s, oid));
		case SNMP_SYNTAX_COUNTER:
			return (snmp_lookup_oidlist(&snmptoolctx->snmp_cntlist,
			    s, oid));
		case SNMP_SYNTAX_GAUGE:
			return (snmp_lookup_oidlist(&snmptoolctx->snmp_gaugelist,
			    s, oid));
		case SNMP_SYNTAX_TIMETICKS:
			return (snmp_lookup_oidlist(&snmptoolctx->snmp_ticklist,
			    s, oid));
		case SNMP_SYNTAX_COUNTER64:
			return (snmp_lookup_oidlist(&snmptoolctx->snmp_cnt64list,
			    s, oid));
		case SNMP_SYNTAX_NULL:
			return (snmp_lookup_oidlist(&snmptoolctx->snmp_nodelist,
			    s, oid));
		default:
			warnx("Unknown syntax - %d", s->val.syntax);
			break;
	}

	return (-1);
}

redpajama_set_name: RedPajamaGithub


text:
<TITLE>Review for Rivières pourpres, Les (2000)</TITLE>
<LINK REL="STYLESHEET" TYPE="text/css" HREF="/ramr.css">

Rivières pourpres, Les (2000)

reviewed by
Berge Garabedian

THE CRIMSON RIVERS
RATING: 7.5/10 --> Very good movie

For more reviews and movie trailers, visit http://www.joblo.com/

PLOT:
One cop is investigating a murder in which the victim was found hanging off
the side of a mountain in a fetal position, with his hands mutilated and
eyes removed from their sockets. Another cop is investigating the
desecration of a mausoleum in the local cemetery. The detectives do not know
each other but their cases are somewhat interrelated. To find out what
happens next...see the movie!

CRITIQUE:
And just when you thought that the serial killer genre had been beaten to
death, the French grab a hold of it and spice it up with a little bit of
their own "je ne sais quoi". Tres bien, mes amis! Here's a movie that takes
the conventions of a typical serial killer thriller, the cops on the
investigation, the gathering of the clues, the close calls, the chase, the
gory details and smacks it all in the ass with an original story, a creative
way of unfolding the plot line and excellent showings from its two leads.
And the film doesn't hide its inspirations either, as the obvious
comparisons to SE7EN are pre-empted by various homage shots to the David
Fincher classic, such as the scenes in the library, the infamous door kick
and an "interesting" confrontation with the killer. But the small French
town locale, the snowy mountains instead of the dreary rain and the concept
behind the killings, make this one a pretty fresh ride of its own. This film
certainly doesn't have the same impact as the latter, nor the ultimate
chilling conclusion (then again, who could ever top the ol' "head in the
box" thang), but it did manage to string me along for most of its way with
an engaging story and two tenacious cops. I will say that the entire story
ends up being a little complicated, and I honestly didn't "get" all of its
finer details, but the movie still worked for me on many other levels. In
fact, it's the kind of movie that I look forward to seeing again, just so
that I could decipher it all again. I also had a little bit of an issue with
the ending, which was a little far-fetched in my opinion, but not enough to
dismiss it as ridiculous. It's somewhat believable under the circumstances
by that point, but some may see it as a stretch.

But what starts out as a routine murder investigation (think X-FILES),
jam-packed with some of the goriest displays of carnage put to the screen
since the aforementioned SE7EN, ultimately turns into thrilling little
movie. We get a very cool chase scene between two characters literally
running after one another to the point of exhaustion. We get an avalanche
that will rock your world, a goofy but fun Mortal Kombat-ish fight sequence
and a lot of bumpin' and jumpin' with cars. But the first half of the film
is strictly investigative and the two actors, Jean Reno and Vincent Cassel,
are the glue that hold the film together through that period. Reno is
perfectly cast as the no-nonsense loner cop who goes by the book and Cassel
works as the cooler, hipper, funnier end of the law enforcement spectrum.
You believe their characters, you believe the world which they inhabit and
you're constantly curious about what's gonna happen next. This film is
definitely one for fans of the genre, although most will likely have to see
it twice to get the exact details of the plotting, and certainly advisable
to all others who enjoy a neat mystery with gory specks, set in a beautiful
setting. And yup, this film is definitely not for the squeamish!

Where's JoBlo coming from?
Seven (10/10) - The Bone Collector (7.5/10) - Kiss the Girls (7/10) - The
Professional (8/10) - Ronin (7.5/10)

Read JoBlo's interview with actor Jean Reno here:
http://www.joblo.com/interviewreno.htm

Review Date: January 17, 2001
Director: Mathieu Kassovitz
Writer: Mathieu Kassovitz
Producers: Alain Goldman and Catherine Morisse
Actors: Jean Reno as Pierre Niemans
Vincent Cassel as Max Kerkerian
Nadia Fares as Fanny Fereira
Genre: Thriller
Year of Release: 2001
------------------------------------
JoBlo's Movie Emporium
http://www.joblo.com/
------------------------------------
(c) 2001 Berge Garabedian

The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).

The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.

Please direct comments/criticisms of the review to relevant newsgroups.

Broken URLs inthe reviews are the responsibility of the author.

The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.

Related links: index of all rec.arts.movies.reviews reviews


text:
Court of Protection Solicitors
As we reach old age, vulnerable individuals often require assistance in the form of a professional deputy to help manage their welfare and finances, and ensure that they cannot be exploited in any way.
Home > Private Client Solicitors > Court of Protection Solicitors
At Slater Heelis, our team of expert court of protection solicitors and professional deputies maintain a proven track record for supporting the fundamental rights, health and wellbeing of vulnerable individuals.
Our understanding of court of protection law safeguards the fundamental rights of those who lack sufficient mental capacity to make important decisions for themselves. We provide expert legal advice that ensures people have access to the right medical care, residential protection, social services and financial support when they need it most.
As a trusted legal advisor to many individuals and families across both Greater Manchester and the North West, we put the best interests of our local community first when seeking an effective resolution to the range of legal challenges they may be facing. Our Court of Protection solicitors provide clear and straightforward advice on deputyship applications, disputes and the ongoing management of a person's assets and estate. We treat every matter with sensitivity, empathy and care, and pride ourselves on taking a personal approach to client service at every turn.
Deputyship
Deputyship provides the authority to make financial or welfare decisions for a loved one who no longer has the mental capacity to make these decisions on their own. It is the duty of a deputy to always act in the best interests of the incapacitated person, making sure that all decisions made are for their benefit.
You can apply to the Court of Protection to legally become a deputy if you are the person's spouse, partner, child, close relative or close friend – but you must be over 18. There can be more than one deputy, and in such cases the court may order you to make decisions jointly. If you are appointed financial deputy, you are responsible for the person's day-to-day financial affairs. This includes budgeting for their future, preserving their access to state benefits (if applicable), looking after any investments they have made, paying their bills, and sorting out their tax.
Of course, looking after an incapacitated loved one's finances, health and welfare can be extremely stressful, time-consuming and, in some cases, rather harrowing. So, if it's easier for you, our experienced lawyers can act as their professional deputy – which allows you to concentrate on providing them with loving care.
As such, our range of services cover the following:
Applications to the Court of Protection for close family members or friends to become a legal deputy
Specific applications to the Court of Protection, for example the sale of property or preparation of statutory wills
Legal support and expert dispute resolution with contested deputyship applications
Professional deputyship, where we act with care to manage the financial and health affairs of a loved one
A highly experienced team
Georgina Bradshaw joined Slater Heelis' renowned Private Client department in May 2013, bringing with her a wealth of experience in legal matters involving mental capacity and Court of Protection work.
As another key figure in this team, Caroline Pinney developed her interest in mental capacity work through her previous background in mental health law. She is also a fully accredited member of Solicitors for the Elderly, as well as a registered Trust and Estate Practitioner (TEP).
Partner, and head of the firm's Private Client team, Chris Partington, is one of only nine panel deputies in the North West, appointed by the Office of the Public Guardian. A panel deputy helps to manage and support decisions about personal finances for people that lack the mental capacity to do so themselves. They are chosen to act as professional deputies by the courts in lieu of an able and willing volunteer.
"I believe that no firm in Manchester can match Slater Heelis for the range of services they provide, combined with their superior level of service. They are one of the few firms in the area that have embraced change, recognised the benefits of using technology, reacted to the market place and achieved growth in a challenging financial climate."
Jason Watkin, Thornley Groves
Our specialists in personal in court of protection are looking forward to helping you.
Chris Partington Partner & Head of Private Client
Georgina Garner (nee Bradshaw) Partner
Katharine Peterson Consultant Solicitor
Danielle Carter Associate Solicitor
Charlotte Kennedy Solicitor
Ann Smith Paralegal
Camella Galvin Paralegal
Karen Ahmed Paralegal
Katherine Logie Paralegal
Jordan Calder Paralegal
Sadaf Idrees Paralegal
Mick Cragg Paralegal (Properties)


For those of us who have spent hours in yoga studios, with boring yoga mats tucked under our arms, help is at hand. Claire Keet, founder of Sentiens, is on a mission to create beautiful yet practical yoga mats that will inspire anyone looking for that perfect zen moment as they exercise and meditate.
LoA found out more about this unique business from its talented designer and founder, Claire Keet.
At Sentiens we sell beautiful, functional yoga and fitness gear. Our focus is on printed yoga and active mats, which combine gorgeous aesthetics with great performance. No more dull, single coloured mats! We love that our products bring a unique visual quality to a yoga practice or workout. All of our designs are created right here in sunny South Africa and we are spoilt for choice when it comes to collaborating with talented local designers.
"We love that our products bring a unique visual quality to a yoga practice or workout."
Sentiens initially began with two of us. The idea was suggested by my former business partner who'd spotted a gap for printed mats in the local market. As a designer myself, the idea immediately resonated with me on an artistic level. What a perfect blank canvas a yoga mat represented! As the business has grown, so the vision has shifted and morphed but the underlying values of 'great design' still underpin everything that Sentiens does.
This is a question I could ramble on answering for ever because I'm still as giddily excited about our products today as I was when the business started. So I'll try to be restrained. One of the biggest reasons why our products are worth buying is that we listen and adapt. We actively seek product feedback from our customers so that we can continually try to improve our offering. Even when feedback is tough to swallow, our customers insights have guided product and design decisions in a very real way over the past year and a bit. We love that our products go out to our customers with that level of input from the people who're using them day to day.
"All of our designs are created right here in sunny South Africa and we are spoilt for choice when it comes to collaborating with talented local designers."
I run Sentiens full-time and have a social media manager who manages the brand's digital presence remotely. Even though I don't employ anyone else full-time just yet, we have key partnerships with a range of people who are all invaluable chinks in the Sentiens chain. Without our brand ambassador, brand photographer, shipping agents, leather craftsman, manufacturers, illustrator... we'd be in a very different place.
My entrepreneurial journey started in Asia. After university I worked for a year before going to teach English in South Korea. Two years into my four years in Korea, I started BorisHenry - a branding business - part-time, with a friend. I knew that when I returned to South Africa that I'd like BorisHenry to become a full-time business. Six months after returning home, Sentiens started up up too. With no background in commerce, I knew nothing about the mechanics of running a business and, quite frankly, will be learning the in's and out's of that for the rest of my working career.
"One of the biggest reasons why our products are worth buying is that we listen and adapt. We actively seek product feedback from our customers so that we can continually try to improve our offering."
I am starting to export customised yoga and active gear, while focusing on continuing to grow Sentiens locally.
What I love most about my work is how much I learn all the time. Learning from books was never something I was particularly great at at school and university. The hands-on learning I have to do day to day is something I find really stimulating and exciting. Even when the lessons come in the form of tough, stressful situations, of which there have been and will continue to be plenty, I still feel so grateful about this aspect of my work.
Interrogate your motivation for starting a business. And be honest with yourself. That motivation is what you'll rely on to get you out of bed when it feels like your business is failing. It will be what helps you remain strong when you're learning the really tough lessons, of which there will be plenty. It will inspire you to find solutions for challenges that seem unconquerable. Write down your motivation and make sure it's real enough not to waver in the face of the fear, hard work, stress and challenges that you will face.


It's been awhile since I've posted, but I've been away for the past 4 days. I left for Phoenix on Friday and was able to get into town in time for the 7pm NLHE tourney at Fort McDowell.
Buy in is $20, with a $10 optional dealer token and $10 rebuys for the first hour along with a $30 addon after the first hour. I didn't have to rebuy at all, and the addon is a great value at 3K chips, you start with 1500, so I did that. There were 138 entrants and I ended up making the final table, woo hoo! I ended up busting out when it was my BB and UTG moved all in. I looked down to AJos and decided to call. He had me outchipped and I got no help, so I ended up in 4th although I was ecstatic that I made it that far.
On Saturday I spent some time at the Women's Expo being held in downtown Phoenix after taking some time out to take my final test from www.trafficschoolonline.com due to a speeding ticket I received a few months ago. I then headed back to Fort McDowell for the nightly tournament. This time I ended up in 7th place and this was after having to rebuy twice in the first hour..I felt very proud especially since there was a dealer who looked right at me and said there would be no way in hell I would make the final table. I looked for him when it was down to 8, but I couldn't find him.
Spent Sunday at the Women's Expo again and then spent some time with my mom and my grandparents. I stayed the night again on Sunday and got home on Monday around 1 pm. I ended up taking a nap in the afternoon, and then went to bed early to watch the Miss. USA pageant with my daughter on TV and that's all she wrote for Monday.
Today I was able to catch up on some work, emails and phone calls and then I actually went on my 2. 5 mile walk that I had started neglecting. I really, really need to walk everyday. I know I will feel so much better if I just stay on a regular exercise schedule.
I will be playing the night away on PS, so will report on that later tonight or tomorrow.
Where the hell does the dealer get off with saying something like that?
I think dealers need to go back to rule 1 of dealing: Shut up and deal.
I am a strong dealer supporter, I am always the one defending them, not allowing abuse, etc. But sometimes, you run into one or two that cross the line and then I agree with you that they should shut up and deal. All others are cool though and I love interacting with them.
Yeah, I have no problem with a little small talk, but telling a player that they have no chance to make the final table???? Do they not want the fish to come back????


Newly updated ground floor condo. Fresh paint, new carpet in the living room and bedrooms. separate dining room which opens up to the backyard. This unit is located right next to the laundry facility. Close to restaurants, and all your shopping needs. Community Pool in the facility.
Unwind, recharge, kick back, and relax at Wind Rush. From our convenient Ft. Worth location to our amazing apartments, Wind Rush has everything you want and then some. Check out our crisp pool, or relax under any one of our numerous trees. You'll have to see it to believe it!
At Valley View Apartments, you will enjoy some great amenities including a brand new playground and sparkling pool! Excellent location, private patios and spacious living are just a few of the many reasons to call Valley View your home. Call or stop by today...we look forward to meeting you!


text:
Tips & Techniques - January 1990
by Jerry Vigil
Bouncing Tracks
If you haven't figured out how to bounce tracks (also called ping-ponging) on your multi-track yet, it's worth knowing how to do. The basic premise of bouncing tracks is to free up used tracks to give you more tracks to work with. This is done by doing a mix at some point in the process of laying tracks and recording that mix to one or two free tracks on the multi-track (one if it's a mono mix -- two if stereo). The tracks that comprise the mix can then be erased for use again.
Different console/tape machine set-ups will use different steps than those described in this tip. For the sake of simplicity, we'll use a standard hookup of an 8-track recorder to an 8-buss console. Let's hook the outputs of each of the eight busses, or group outputs, directly to each of the eight inputs on the recorder. The eight outputs of the recorder are connected to TAPE inputs one through eight on the console. Each track of the multi-track then comes up on faders 1 through 8 of the console -- fader 1 is assigned to buss 1, fader 2 to buss 2, etc.
We'll start with our console in the TAPE monitor mode while we are laying down tracks. We put a stereo music bed on tracks 1 and 2, and on tracks 3 and 4, we add stereo sound effects. To bounce all four of these tracks to tracks 7 and 8, you would do the following: Take tracks 1 through 4 out of the TAPE monitor mode on the console. Bring up tracks 1 through 4 on the console faders and assign tracks 1 and 3 to buss 7, and tracks 2 and 4 to buss 8. This way, all left channel material will be recorded to track 7 and all right channel material to track 8. Now bring up faders 1 through 4 and set your mix levels. When you're happy with the mix, simply rewind, hit RECORD, and the mix will go to tracks 7 and 8. Be sure tracks 1 through 4 are in the "safe" mode so you don't erase them. When you've recorded the mix to tracks 7 and 8, you can erase tracks 1 through 4 and use them for something else.
In a 4-track studio, the same thing can be accomplished by mixing all four tracks to another 2-track machine, then recording the 2-track mix to tracks 1 and 2, thus freeing up tracks 3 and 4. Bear in mind that every time you bounce tracks, you're adding tape hiss to your mix. You'll notice a drop in the highs, as well. This generation loss can be reduced by recording your mix to RDAT before putting it back onto the 4-track. If your RDAT's in the shop, at least record your mix at 15ips, or 30ips if you have it. If you're going to do a lot of bouncing around, save tracks with a lot of highs for last. Record voice tracks and sound effects first, assuming your sound effects don't have a lot of highs in them. The stuff you want to sound really crisp in the end should be saved for last.
Those of you stuck in a 2-track studio can bounce around, too. You'll be stuck with mono mixes, but the process and the result are the same. Let's say you have a 2-voice spot, and you're both voices. Record voice 1 to the left channel, then voice 2 to the right channel while monitoring voice 1 on the left. Mix these in mono to another 2-track then record that mix to the left channel of the other 2-track. You now have a free track. This can go on forever, and if you keeping bouncing with a 2-track, you'll understand why this technique is also called "ping-ponging." If you're building a 2-voice spot with a lot of different sound effects, you can still get some stereo effects by mixing the "bounced" mono track "live" with your stereo music or whatever. 2-track bouncing will get you to tape hiss city faster than anything. Use the highest speed on your 2-track at all times. Be careful not to add too much high end EQ while you're recording tracks early on. Try to save high end boost for the end to avoid emphasizing tape hiss.
Using Pitch Shifters To Keep Things Musically Correct
Let's say you're building one of your dynamite promos. You've got this great music bed and you're adding some stagers and zaps. You whip out your Brown Bag CD full of goodies, find one you like, and lay it over the music bed; but it doesn't "sound" right. If you're the least bit musically inclined, you might realize that the bed and the synthesizer effect don't fit because they're not in the same musical key. Patch that CD player into your pitch shifter!
It'll take some playing around with unless you know what keys the bed and the effect are in, but, eventually, you'll find a setting that puts both elements in the same musical key. If you get good at this, it'll be difficult to tell that the added effect wasn't part of the music to begin with
Test Drive: The AKAI S1000 Digital Stereo Sampler
June 30, 2013 13721
AKAI's S1000 16-bit stereo sampler is fast becoming the "industry standard" much like its predecessor, the S900. This "industry" is the music industry. For musicians, many of the features of the S1000 will be regularly used and...


In the list of applications I have the product FreeCommander XE 2018.
The year number changes every year!
So I recommend that you change the name of the product to FreeCommander XE and move the year to the version number.
This is the best way how to display the versions.
@olli_s I've reworked the Rules for FreeCommander. Let me know what you think.
Free users get Build 777, Donors get access to newer builds (not beta, stable builds) as bonus.
At the page https://freecommander.com/donors/page/downloads?_lang=en donors can download all available versions in 64 bit.
I did not find the word "Beta" at the donors page, but I found it at the official download page.
But this available beta (Build 780) is older than the current donors (Build 783).
Build 781 and the newer Build 783 is for donors only.
I can show you the download page by screen sharing (because it is password protected).
I plan to make a new Product Channel for FreeCommander XE 2017, since it is supported in parallel with the 2018.
But, this may be different for the 64bit / donor version, and perhaps we need separate Product Channels for the stable donor version and the beta donor version.
And I see no official information about build 781, please send me a link if I missed it.


text:
A black cab for a very special day
2019-03-04 18:48:00 Palma	By Humphrey Carter
Sandra Schwenn (right) and Lara Keszler.
04-03-2019Thom Hanreich
I bet you have never been driven around Palma in a classic London black cab/ Hackney carriage. Well I have and it's the most amazing experience, and it was not even my wedding day. Even Palma cabbies love it and will honk or wave as it goes past. It's the ultimate show stopper and, having been totally restored and lovingly cared for, it's in mint condition and a joy to sit back and travel in.
Business partners Sandra Schwenn and Lara Keszler, who form the LOOVE Weddings & Events Team, founded by Sandra, are the driving force behind this unique opportunity. After having slowly launched their new venture last year, they are now ready to hit the road running this year. A number of weddings and events have already booked the London cab, which comes with its special chauffeur who is all suited and booted.
Sandra is a former model, interior and fashion designer who studied in London. She not only fell in love with the city but its black cabs. She has always had a soft spot for cars. For her twentieth birthday her present was a Mustang 390 GT, the model driven by Steve McQueen in the classic film Bullitt. And guess what she got for her fiftieth birthday - a London cab.
Lara is an assistant film editor and has been involved in a number of major productions here in Majorca. She joined Sandra in her wedding and events project last year. Neither actually planned on living here, but one thing led to another and the quality of life, the quality time they are able to spend with friends and family proved just too much of an attraction, plus Sandra has previous knowledge of Ibiza. So she was no stranger to the Balearics and what the islands have to offer.
Via their weddings and events company they really want to spread the LOOVE. "As a location for a wedding or special event, Majorca is just perfect. It has everything. There is guaranteed good weather pretty much all year and there are so many idyllic and breathtaking spots - from excellent hotels to the coasts and the mountains - plus we've got such a high standard of catering companies on the island. It's just a first class spot and just a few hours flights from most European capitals.
"Everything is all so close. It's so compact, it's a joy to work here and make people happy, to make sure they really do enjoy the most important day of their lives," Sandra said.
And they are both in love with their London cab. "I find it so relaxing to drive. It's automatic, makes a lovely deep engine noise, driving her is like meditation for me. And it's fun driving on the right."
Lara is equally excited about this year. "The taxi gives that extra edge and we've got the only one in Majorca. Our philosophy is to help create love and what better way than by doing something really unusual. And you can feel the soul of the taxi, it has a great atmosphere.
"We've had a lot of interest from the UK, Sweden, Germany and even Australia and we want to keep than momentum going. The cab is such an eye-catcher. She's beautiful and cool; she even smells wonderful. For that perfect moment, the London can ticks all the boxes and more."
For more information visit www.loove.es
LOOVE Weddings & Events Team


"... no pressure whatsoever ...". Isn't that how it always starts?
Initially I intended to head over to the Chemnitzer Linuxtage for a chat here and there and maybe a beer or two. Just for fun.
But when I realized that there are still some possibilities for giving a short overview on a Gentoo-specific topic, I told Tobias (dertobi123) that I could give a talk on the Kolab2/Gentoo project. That is definitely still within the fun area of things.
Hrm,... no clue how I managed to break my Gallery installation. I probably played around too much with gallery2flickr. Though maybe I killed it when bumping and testing the ebuild last time.
Anyhow it must have been a while ago so I actually had to ask dar to go into recovery mode. And since this happens very infrequently I always forgot how to select a sub-path of the whole archive dar creates.
Hello again, my dear Gallery... Backups are indeed a nice thing.
I've waited since Friday and it finally arrived today. Another German Gentoo book is available now!
For new users it should be possible to grab a laptop, insert the DVD and run through large parts of the book without ever connecting to the net. Thus the first steps with Gentoo are hopefully pleasant.
Even the early chapters feature larger sections that provide in-depth knowledge for the more experienced Gentoo users. All tools, options, variables and concepts are referenced in the thirty index pages of the book. So it should be a good companion while working with Gentoo.
If you need more details you can check the table of contents or even read the chapter on writing ebuilds.
One of the later chapters - "Extending Gentoo" - can be considered the main origin of the whole story. It talks about overlays.gentoo.org and layman.
About two years ago I sat down on a weekend to code the basis for layman in order to make the use of overlays.gentoo.org as easy as possible. I certainly didn't expect this to have any significant effect. After all layman always was - and still is - a rather trivial script.
But since I liked the whole idea about overlays I decided to write a small article about this concept as well as how layman fits into that. This got published in the German Linux magazine and had one unexpected result: I got an email from OpenSourcePress asking whether I'd like to write a whole book about Gentoo. At that time the answer was "yes".
Would it be "no" today? I'm not certain. I have to say that I hated the three weeks of pure text editing in the final phase of the project. It reminded me far too much of my PhD thesis. Yes, I like writing stuff: emails, wiki pages, blog entries, source documentation, ... you name it. Small stuff. Epic texts turn out to be much harder.
What definitely made it bearable in this case were the systems provided by OpenSourcePress: They give you a subversion repository and the whole text is done in Latex. They also work with Emacs on their end which happens to be my favorite editor too.
And one thing about their subversion repository is really great: You commit crudely written techno-babble on your side and a few revisions later it comes back in well readable German. This is what I definitely liked most about the whole project: Getting rewritten to readable language. Big kudos to the team of editors which really does great job.
So would I do it again? Well, I don't have to decide on that anymore. The basis is there so all there will be are further revisions. And that will hopefully be easier than the first version.
Feels good to be finally back working on Horde. Last week saw the generation of Kolab patches for Horde-3.2-RC2 and this week I finally synchronized my work environment with Horde CVS. The first Kolab commit to Horde CVS went in yesterday. It felt like the last one was ages ago.
Anyhow there are more commits ahead. Now that most parts of Horde work with Kolab the time for the second round of coding is approaching fast: restructuring and optimization. There is still a lot that needs to be done and I'm desperately waiting for Horde 4 to finally restructure the whole Kolab module and get it on a hopefully sane path for the future.
Now that I'm back working on some of my Python packages it was time to look at Python package management again. So far I just used the embedded distutils package but apparently "setuptools" is the thing that starts to be used widespread. So I looked at this in more detail and will summarize some notes here.
"setuptools" does actually not deliver too much fancy new functionality. The main benefit lies in the area of dependencies and the creation of distributable packages.
I'm mainly using find_packages() to generate the package list and add some packages as basic requirements. In order to make this also work on "non-setuptools" system the whole is embedded in a try: ... except: ... statement.
The whole thing is not yet complete since I don't know every detail of "setuptools" yet, but the main point here is that things are not too different if you decide to upgrade from "distutils".
the command python setup.py release sdist will create a release source package (e.g. libpardus-0.9.2.tar.gz). The relpatch command is for releasing a patch level package after the main release.
But during development it is really nice to produce these testing eggs without the need to build/install the tools every time.
This way you would place web.py as a packaged egg within the lib directory.
The details can be found on the setuptools homepage.
I'll probably continue this once I learn how to upload python packages to PyPI, the python package index.
I do have a number of subversion repositories that I like to backup once every hour. The tool I'm using for that is the perl package SVN::Mirror. I didn't document the usage of this tool for myself yet and I feel it is time to correct that.
This delivers the tool /usr/bin/svm that holds all the functionality to replicate Subversion repositories.
I package these few lines into a small shell script and add it to cron so I get a regular update on all the repositories. Just in case Sourceforge ever dies (which I hope it does not).
libpardus is another one of my python projects that I hope to get revived soon. It provides a collection of different utilities that I require for the other python tools I wrote. Right now I'm just busy getting the project basics updated and this is a first blog post for the tool.


Ne Ko Nja Cha... [KS Krishnan, Preethi Pillai], [D Santhosh], [Prasanth Pillai] -Film:Nee Ko Nja Cha.
Promo Song... [Chorus], [D Santhosh], [Prasanth Pillai] -Film:Nee Ko Nja Cha.
Thanuppicha Beerinte... [Saju Sreenivas, KS Krishnan], [D Santhosh], [Prasanth Pillai] -Film:Nee Ko Nja Cha.