Category Archives: Uncategorized

Bitcoin Mining on Mac OS X – the New R-Box

RockMiner Logo

RockMiner has recently released their re-designed New R-Box ASIC miner. You may recall I reviewed their original R-Box in July (after fixing a small bug that kept it from working on Mac OS X).

With the release of their new ASIC, both existing and potential customers of RockMiner began asking bout their Mac OS X support…which lead my contacts at RockMiner to reach out for assistance in both verifying support and providing guidance.

New RBox

The original R-Box was a ~34 Gh/s SHA2 ASIC with a familiar open-PCB design and active cooling. The New R-Box is a very sleek, fully inclosed unit that hashes out-of-the-box at 100 Gh/s.

Like the original R-Box, this new unit is powered by the the 3rd-generation, 40 nm BE200 ASIC chip from ASICMINER and is available for order directly from RockMiner.com.

Miner Installation

The simplest way to get hashing at a full 100 Gh/s with the New R-Box on OS X is by using CGMiner. So, the first step is to install CGMiner on OS X. There is a thread here on the Bitcoin Talk forums that discusses several ways to install CGMiner on Mac OS X. The most full-proof method is to use Homebrew:

  1. Launch Terminal.app from Spotlight or your Applications folder
  2. Install Homebrew by entering the following in the command prompt:
    ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)"
  3. Run the following command and then fix any reported issues:
    brew doctor
  4. Tap the following Homebrew repository so that you can install packages from it:
    brew tap nwoolls/xgminer
  5. Finally, install CGMiner:
    brew install cgminer

Driver Installation

CGMiner requires that no driver be loaded in order to detect the RockMiner R-Box. While this may not be a problem for many, if you have Silicon Labs CP210x drivers installed you may need to run the following command in Terminal.app:

sudo kextunload -b com.silabs.driver.CP210xVCPDriver64

Detection

With CGMiner properly installed (and the CP210x driver unloaded if needed), you can use the -n argument to list available devices with CGMiner:

cgminer -n
[2014-10-03 16:06:37] USB all: found 21 devices - listing known devices
.USB dev 0: Bus 58 Device 2 ID: 10c4:ea60
Manufacturer: 'Silicon Labs'
Product: 'CP2102 USB to UART Bridge Controller'
[2014-10-03 16:06:37] 1 known USB devices

Mining

Once the New R-Box is detected you can start CGMiner using the -o, -u and -p arguments to begin mining:

cgminer -o hostname -u username -p password

CGMiner New RBox Mac

While you can also mine with the New R-Box using BFGMiner, the RockMiner driver currently does not perform as well as CGMiner and only hits about 80 Gh/s.

bfgminer -S rkm:all --set rkm:clock=310 -o hostname -u username -p password

BFGMiner New RBox Mac

The New R-Box is a big improvement over the original device in both performance and looks and works great on OS X, Windows and Linux.

If you have any questions feel free to post them in the comments below or on this thread at the Bitcoin Talk forums.

And “Thank You” again to RockMiner for providing sample hardware!

Bitcoin Mining on Mac OS X – Bi•Fury ASICs

In my previous post on Bitfury based USB sticks I looked at the Blue Fury and Red Fury ASICs. Those sticks pack a single 55nm Bitfury ASIC chip and hash at between 2.2 and 3.0 Gh/s, depending on cooling and other factors.

The Bi•Fury stick (currently in stock) is another new USB ASIC based on the 55nm Bitfury chip. As the name implies, this new stick packs two chips instead of the Blue/Red Fury’s one and hashes at an advertised 5 Gh/s.

Bi•Fury

These devices are very professional and visually striking as far as USB miners go. They have a very nice red PCB and matching red heat-sink.

Let’s see what it takes to get mining with one of these under OS X!

Miner Installation

As with most previous ASICs, the first step is to install either bfgminer or cgminer on OS X (unlike the HashBuster Micro cgminer is perfectly capable of utilizing the Bi•Fury). There is a thread here on the Bitcoin Talk forums which discusses various ways to install cgminer and bfgminer on Mac OS X. One of the more full-proof methods is to use Homebrew:

  1. Launch Terminal.app from Spotlight or your Applications folder
  2. Install Homebrew by entering the following in the command prompt:
    ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)"
  3. Run the following command and then fix any reported issues:
    brew doctor
  4. Tap the following Homebrew repository so that you can install packages from it:
    brew tap nwoolls/xgminer
  5. Finally, install either cgminer or bfgminer:
    brew install bfgminer

Note: if you’d like to install the miner using the latest source from Github rather than the latest official package, use the –HEAD (two dashes prefix) parameter, e.g.:

brew install bfgminer --HEAD

Driver Installation

The setup here is nearly identical to the Blue Fury and Red Fury sticks. Running bfgminer requires the correct kernel extension to be loaded in order to detect the Bi•Fury stick and cgminer will fail to detect the stick unless that same kernel extension is unloaded. As with the Blue and Red Fury sticks there is no driver or software to download. When using bfgminer the Apple Communication Device Class (CDC) driver will be used and when using cgminer that driver (kernel extension) must be unloaded.

To load the required Apple drivers (if you intend to use bfgminer) execute the following command:

sudo kextload -b com.apple.driver.AppleUSBCDC

To unload the driver (if you intend on using cgminer) execute the following:

sudo kextunload -b com.apple.driver.AppleUSBCDC

Detection

With the proper Bitcoin mining software installed and the kernel extensions loaded (or unloaded), you can use the -d? argument to list available devices with bfgminer:

bfgminer -d? -S bifury:all
[2013-12-19 01:53:26] Started bfgminer 3.8.1
[2013-12-19 01:53:29] Devices detected:
[2013-12-19 01:53:29] Device (driver=bifury; procs=2; path=/dev/cu.usbmodem5d11)
1 devices listed

or with cgminer:

cgminer -d?
[2013-12-19 01:52:12] Started cgminer 3.8.5
[2013-12-19 01:52:14] Devices detected:
[2013-12-19 01:52:14] 0. BXF 0 (driver: bitfury)
[2013-12-19 01:52:14] 1 devices listed

Mining

Once the Bi•Fury stick is detected you can start your preferred mining software using the -o, -u and -p arguments to begin mining:

cgminer -o hostname -u username -p password

Bi*Fury cgminer

Note that using bfgminer requires an additional -S argument:

bfgminer -S bifury:all -o hostname -u username -p password

Bi*Fury bfgminer

If you have any questions feel free to post them in the comments below or on this thread at the Bitcoin Talk forums. Happy mining!

Hip Shot Update with iPhone 5 Support Available


A new update for Hip Shot is available from the iTunes App Store. This update includes the following changes:

  • Support for the new 4″ Retina display in the iPhone 5
  • Support for the new Retina display in the 3rd generation iPad
  • The ability to specify a default injection method

While previous versions of Hip Shot work wonderfully on the iPhone 5 and the 3rd generation iPad, the new graphics in this update ensure that Hip Shot looks as gorgeous on these new devices as it does on previous generation iPhones and iPads.

These changes come thanks in no small part to Alan Sevajian, who continues to create wonderful graphics for the app. He created all new super-hi-res graphics for this update with new images consisting of up to 3 million pixels each. His work is what makes this update look super crisp on the latest devices.

Hip Shot is available from the App Store and, as always, proceeds are donated to the National Multiple Sclerosis Society.

Password Tote for Mac OS X Updated

Password Tote for Mac OS X 1.0.3 is now available for download. This update includes:

  • Importing from LastPass
  • Growl integration with notifications when the user should backup and when an account will expire
  • User interface enhancements, including a new icon
  • A new PKG installer

The Password Tote website is free and allows you to manage your passwords securely from any location. The desktop and mobile applications require a $2.99/mo subscription. Start your free two month trial here.

The iOS and Mac OS X versions of Password Tote use the outstanding communication libraries from RemObjects, and the Windows version’s slick visual styling comes from DevExpress’s WinForms controls.

User Owned Objects in XAF

Working on a little XAF project, I recently had the need (a common one) to support the concept of objects being owned by certain users. When a user logs in, he or she should only see the objects owned by that user. This needed to apply to both the list views and the data available in reports.

In the end, this was fairly easy to do. I thought I’d share some notes about how I accomplished this, as some of the resources online are a bit outdated, or don’t lay all of these aspects out together.

Note that there is currently a request to support this sort of scenario directly in XAF’s security system. You can track the issue here.

The first thing to do is define the business object itself (we’ll called it OwnedObject). The only thing particularly interesting here is defining a property to reference the object’s owner, and initializing that value:

public class OwnedObject : BaseObject
{
    public OwnedObject(Session session) : base(session) { }

    public override void AfterConstruction()
    {
        base.AfterConstruction();
        if (Session.IsNewObject(this))
        {
            _ObjectOwner = Session.GetObjectByKey<SimpleUser>((Guid)SecuritySystem.CurrentUserId);
        }
    }

    private SimpleUser _ObjectOwner;
    public SimpleUser ObjectOwner
    {
        get
        {
            return _ObjectOwner;
        }
        set
        {
            SetPropertyValue("ObjectOwner", ref _ObjectOwner, value);
        }
    }
}

One way to filter list views by this ObjectOwner property is discussed here. Open up the XAFML file for the platform agnostic Module project. Navigate to the OwnedObject_ListView node under Views. Set the Criteria to ObjectOwner.Oid = '@CurrentUserID'. Here, ObjectOwner is the property defined on the OwnedObject class, and @CurrentUserID is expanded at runtime to contain the current user’s ID.

Set the same Criteria property on the OwnedObject_LookupListView node as well, and run your application. Both the WinForms and ASP.NET applications should now only show the objects created by the current user, which is automatically set when the object is created. Note that you can also accomplish the same thing with a View Controller.

You can hide the ObjectOwner property at runtime by deleting its respective items under the DetailView, ListView, and LookupListView nodes in the model editor. Also note that this can easily be applied to reports as well, so that a user only sees his or her reports. Simply descend a new object from ReportData, and use your OwnedReport as the data type for the report views.

This is all pretty cool with minimal code, but one issue that needs to be addressed is the data shown in reports. If a user were to create and run a report on OwnedObjects, they’d see all objects regardless of owner. This is also fairly easy to fix, but requires two solutions, one for the WinForms project and one for the ASP.NET project.

The solution for the WinForms project is discussed here. To the WinForms module, add a new View Controller. You’ll also need to add references to ExpressApp.Reports, ExpressApp.Reports.Win, XtraReports, and XtraReports.Design. Add the following code to your controller:

protected override void OnActivated()
{
    base.OnActivated();
    XtraReport.FilterControlProperties += XtraReport_FilterControlProperties;
    Frame.GetController<WinReportServiceController>().CustomShowPreview += ViewController1_CustomShowPreview;
    Frame.GetController<WinReportServiceController>().CustomShowDesignForm += ViewController1_CustomShowDesignForm;
}

void XtraReport_FilterControlProperties(object sender, FilterControlPropertiesEventArgs e)
{
    if (e.Control is XtraReport)
    {
        e.Properties.Remove("FilterString");
    }
}

void ViewController1_CustomShowDesignForm(object sender, CustomShowDesignFormEventArgs e)
{
    e.Report.FilterString = CriteriaOperator.Parse("ObjectOwner.Oid=?", SecuritySystem.CurrentUserId).ToString();
}

void ViewController1_CustomShowPreview(object sender, CustomShowPreviewEventArgs e)
{
    e.Report.FilterString = CriteriaOperator.Parse("ObjectOwner.Oid=?", SecuritySystem.CurrentUserId).ToString();
}

protected override void OnDeactivating()
{
    base.OnDeactivating();
    Frame.GetController<WinReportServiceController>().CustomShowPreview -= ViewController1_CustomShowPreview;
    Frame.GetController<WinReportServiceController>().CustomShowDesignForm -= ViewController1_CustomShowDesignForm;
}

Basically, when the controller is activated, it will add two event handlers to the report service controller for WinForms applications – one for when a preview is shown, and one for when the report is designed. These events force a criteria that only shows objects owned by the current user. The FilterControlProperties event hides the FilterString property.

I had to figure out the ASP.NET portion on my own, but it wasn’t hard. Based on the WinForms solution above, I knew to look at the WebReportServiceController. Turns out you can simply descend from that class and override ShowPreviewCore to filter the data.

For the ASP.NET module, add a new class. Descend the class from WebReportServiceController and add the following code:

protected override void ShowPreviewCore(IReportData reportData, CriteriaOperator criteria)
{
    criteria = new BinaryOperator("ObjectOwner.Oid", SecuritySystem.CurrentUserId);

    base.ShowPreviewCore(reportData, criteria);
}

You’ll also need to add references to ExpressApp.Reports, ExpressApp.Reports.Web, XtraReports, and XtraReports.Web. This does essentially the same thing as the WinForms solution, overriding the preview of the report to force a filter on the object’s owner.

With those two changes made, you can now run both the WinForms and ASP.NET XAF applications, create and run reports, and you will only be able to see your own objects.

You can download a sample that demonstrates all this here.

New Version of Password Tote for Mac OS X Available

Version 1.0.1. of Password Tote for Mac OS X (powered by RemObjects SDK for Xcode) is now available for download. This version brings a few new features and fixes, most notably:

  • The ability to import passwords from 1Password and KeePass
  • The ability to check for new updates from within the program
  • More consistent password generation
  • Minor bug fixes

As previously stated, there’s also an update for the iOS app in the works as well. Version 1.0.1 for iOS is just going through some final testing before submitting the update to Apple for approval.

Size a Delphi Form to fit an ExpressLayout Control’s Content

Today I was faced with the need to have some MDI child forms automatically size to fit their contents. These forms all descend from a base form that has an ExpressBars bar manager and an ExpressLayout layout control. I was surprised (though I shouldn’t be at this point) at how easy this was to achieve:

procedure TDataDetailsForm.FormShow(Sender: TObject);
begin
  inherited;
  SizeToRootLayoutContents;
end;

procedure TDataDetailsForm.SizeToRootLayoutContents;
begin
  ClientWidth := DetailsLayoutControlGroup_Root.ViewInfo.Bounds.Right -
    DetailsLayoutControlGroup_Root.ViewInfo.Bounds.Left +
    (DetailsLayoutControl.LayoutLookAndFeel.Offsets.RootItemsAreaOffsetHorz * 2);
  ClientHeight := DetailsLayoutControlGroup_Root.ViewInfo.Bounds.Bottom -
    DetailsLayoutControlGroup_Root.ViewInfo.Bounds.Top +
    (DetailsLayoutControl.LayoutLookAndFeel.Offsets.RootItemsAreaOffsetVert * 2) +
    DetailsBarManagerBar1.RealDockControl.Height;
end;

With that bit of code in place, each form now automatically size to fit its contents when shown, but can still be freely resized.

A Few New Articles

I’ve posted a couple of new articles – one on creating Data Abstract servers utilizing RemObjects Hydra, and one on creating custom packages for your Hydra projects. I’ve also added links to a few of my other articles available in the links section on the right.

Hopefully I can keep the motivation going and get a new post on tide up.

What is tide?

To call tide an application framework is, in my humble opinion, an overstatement. Even the term plugin framework seems like a bit much – after all, that’s what RemObjects Hydra is.

Perhaps scaffolding is a better term – or is that only for user interfaces generated from DB’s?

So what is tide?

The bits and pieces that make up tide will be:

  • A great starting point for many .NET applications that will make use of DevExpress WinForms controls and RemObjects Hydra
  • A sort of working tutorial on how the myriad of DevExpress controls interact at an application level
  • The completed Northwind client will serve as a nice sort of “mega-demo” for both the DevExpress WinForms controls and RemObjects Hydra for .NET

So, now, what should you expect from the completed Northwind client? My plans are to provide:

  • A working application for editing the customers and orders in Northwind, including the usual CRUD functionality
  • A functioning options plugin for setting up the Northwind connection
  • Browse and detail screens screens for viewing, searching, and filtering customers and orders
  • A sample registration plugin, written in Delphi, to illustrate incorporating software registration and using RemObjects Hydra to load plugins from Delphi

And, over time, who knows what else may creep in – scope creep is okay in demos no?

Of course, as discussed before, because this uses the tide framework (someone please give me a better word!), this all comes with “automatic” support for great controls from DevExpress, including the Ribbon from Microsoft’s Fluent Interface, live spell-checking, printing, exporting to various file formats, Visual Studio 2008-style docking, runtime layout customization, and much more.

More importantly, the demo should illustrate that all of this functionality comes (from DevExpress and RemObjects really), at very little cost in terms of source code written and maintained. Most of these features come from supporting one or two methods of an implemented interface.

More to come soon. Have a great 4th of July, if I don’t find time to post beforehand!